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" ステータスの 2 番目のインスタンスを無視していることです。テーブルを 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

ただし、FLSAStatus を気にせずに特定の EEID の最新の変更に関心がある場合は、上記のクエリから 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 に答える