这看起来应该很容易,但我在这方面打成平手。
我的表与此类似(有更多列和多个ID):
EEID (unique) - FLSAStatus - EffDate
============= ============ =============
4ABC1 - A - 10/01/2010
4ABC1 - A - 11/01/2010
4ABC1 - E - 11/30/2011
4ABC1 - O - 01/01/2012
4ABC1 - O - 01/31/2012
4ABC1 - A - 11/03/2012
4ABC1 - A - 11/13/2012
我想要返回的唯一记录是FLSA状态的最新更改 - 在本案例中是2012年11月3日的记录。
我的问题是我的查询因为我的分组而忽略了“A”状态的第二个实例。我尝试将表拉成A和B并尝试比较日期和状态,但我不断收到语法错误。
例如:
SELECT * from
(
select a.eeid, a.flsastatus, a.effdate
from
history a with (nolock),
history b with (nolock)
where
a.eeid = b.eeid
and a.eeid ='4FM7IK0000K0'
)
Where
a.effdate >= b.beffdate
and a.flsastatus <> b.flsastatus
显然我是初学者 - 帮助!!请!?
答案 0 :(得分:0)
如果您正在寻找给定(EEID,FLSAStatus)的最新更改,那么您可以
SELECT A.*
FROM
history A
JOIN
(
SELECT EEID, FLSAStatus, MAX(EffDate) 'MaxEffDate'
FROM
history
GROUP BY EEID, FLSAStatus
) AS B
ON
A.EEID = B.EEID AND
A.FLSAStatus = B.FLSAStatus AND
A.EffDate = B.MaxEffDate
但如果您对给定EEID的最新更改感兴趣而不担心FLSAStatus,请从上述查询中删除FLSAStatus。
答案 1 :(得分:0)
select min(EffDate)
from history t
where not exists
(select 1 from history where t.FLSAStatus <> FLSAStatus and Effdate > t.Effdate
and t.eeid = eeid)
and t.eeid = 4FM7IK0000K0'