我有一个变量表“ @USERS”和一个基于生效日期的USERCLASS数据库表。我需要做的是在确定的日期填充USERCLASS。例子:
@USERS
USERID | OTHER
--------------
A1 | 1
B1 | 2
C1 | 3
D1 | 4
数据库表
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年1月1日的日期。将要使用的课程将是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
任何帮助,将不胜感激。
大概,您需要一个相关的子查询。您的问题提到一张桌子@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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句