【问题标题】:T-SQL to return only rows where a status category has changed from the previous statusT-SQL 仅返回状态类别已从先前状态更改的行
【发布时间】:2012-11-21 14:53:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql sql-server tsql select


    【解决方案1】:

    如果您正在寻找给定(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。

    【讨论】:

    • 问题是表中的记录有其他变化,FLSA 状态没有变化——这些记录作为最大日期返回,而不是我们想要的。
    【解决方案2】:
    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'
    

    【讨论】:

    • 我无法用这个拉回任何结果?
    • @user1871450 就像在你的例子中我在代码的最后一行使用了一个特定的 id,你所要做的就是删除查询的那部分。这将工作
    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多