2016-03-04 68 views
0

我有一个变量表“@USERS”和一个基于生效日期的USERCLASS数据库表。我需要做的是在确定的日期填充USERCLASS。 实例:TOP 1记录基于加入表中的每个记录的日期

@USERS

USERID | OTHER 
-------------- 
A1  | 1 
B1  | 2 
C1  | 3 
D1  | 4 

DBCLASSTABLE

USERID | CLASS | EFFECTIVEDATE 
------------------------------ 
A1  | ZZ | 2015-02-01 
A1  | XX | 2014-02-01 
B1  | TT | 2015-02-01 
B1  | RR | 2014-02-01 
etc.. 

基础上,这将是在比赛将是2014年的有效类2015-01-01..The类的日期都。

我所拥有的是:

SELECT 
    USERID, 
    OTHER, 
    'CLASS' = (SELECT TOP 1 
        A.CLASS 
       FROM 
        DBCLASSTABLE A 
        JOIN @USERS B on A.USERID = B.USERID 
       WHERE A.USERID = B.USERID AND A.EFFECTIVEDATE < 2015-01-01 
       ORDER BY A.EFFECTIVEDATE DESC 
      ) 
FROM 
    @USERID 

不过,我已经清楚地做错事,因为它返回DBCLASSTABLE的所有记录的顶部。

USERID | OTHER | CLASS 
---------------------- 
A1  | 1 | ZZ 
B1  | 2 | ZZ 
C1  | 3 | ZZ 
D1  | 4 | ZZ 

使用这个样本数据,它应该只返回

USERID | OTHER | CLASS 
----------------------- 
A1  | 1  | XX 
B1  | 2  | RR 

任何帮助,将不胜感激。

回答

0

推测,你想要一个相关的子查询。您的问题提到@USERS表,但没有一个提到@USERIDS。我要去猜他们是相同的:

SELECT USERID, OTHER, 
     (SELECT TOP 1 c.CLASS 
     FROM DBCLASSTABLE c 
     WHERE c.USERID = u.USERID AND c.EFFECTIVEDATE < '2015-01-01' 
     ORDER BY A.EFFECTIVEDATE DESC 
     ) as Class 
FROM @USERS u; 
+0

美丽!谢谢你的快速反应。标记为答案! – bpw

0

您可以使用下面的查询:

SELECT  users.userid, users.other, class.class 
from  users users 
inner join dbclass class on users.userid = class.userid 
where  class.EffectiveDate < '2015-01-01' 

您罐头看到这里 - >http://sqlfiddle.com/#!9/9506c1/2

希望这有助于!