获取值但仅在包含该值的所有行的最新(日期时间)不等于x时才获取

时间:2015-12-02 18:38:39

标签: sql sql-server tsql

示例:

PK  Date      Status  Serial
----------------------------
1   11012015  1       8888
2   11032015  8       8888
3   12012015  1       8888
4   11032015  1       9999
5   11152015  1       9999
6   12012015  8       9999

我正在尝试获取serial的所有值,其中每个日期的最后一个状态是1,但如果最后一个状态是8,那么我需要排除这些序列号。

因此,上面的示例将显示8888,因为最后一个状态为1

虽然9999会被过滤,因为它的最后状态是8。

1 个答案:

答案 0 :(得分:0)

这是按序列获取最新日期,然后连接回主表(我在此称为YourTable,因为您没有提供实际名称)以获取其余数据。您的过滤发生在WHERE子句中。

SELECT
    YourTable.PK, 
    YourTable.[Date],
    YourTable.[Status],
    YourTable.Serial
FROM
    (
    SELECT
        Serial, 
        MAX([Date]) AS [MaxDate]
    FROM
        YourTable
    GROUP BY
        Serial
    ) DerivedMaxDateBySerial
    LEFT OUTER JOIN YourTable ON DerivedMaxDateBySerial.Serial = YourTable.Serial AND DerivedMaxDateBySerial.[MaxDate] = YourTable.[Date]
WHERE
    YourTable.[Status] != 8