我有一个变量表" @USERS"以及基于生效日期的USERCLASS数据库表。我需要做的是在确定的日期填充USERCLASS。 实施例:
@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..
根据2015-01-01的日期...将参加的2014年有效课程。
我拥有的是:
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的TOP。
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 :(得分: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;
答案 1 :(得分: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'
你可以在这看到这个 - &gt; http://sqlfiddle.com/#!9/9506c1/2
希望这有帮助!!!