1

这似乎应该很容易,但我对此束手无策。

我的表与此类似(有更多的列和多个 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

显然我是一个初学者 - 帮助!请!?

4

2 回答 2

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。

于 2012-12-04T02:27:16.680 回答
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'
于 2012-12-04T08:52:25.320 回答