Sql 获取一个值,但仅当包含该值的所有行的最新(datetime)不等于x时

Sql 获取一个值,但仅当包含该值的所有行的最新(datetime)不等于x时,sql,sql-server,tsql,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 我正在尝试获取序列号的所有值,其中每个日期的最后状

例如:

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
我正在尝试获取序列号的所有值,其中每个日期的最后状态为1,但如果最后状态为8,则需要排除这些序列号

在上面的例子中,8888会出现,因为最后一个状态是1


而9999会被过滤,因为它的最后一个状态是8。

这会通过序列获取最近的日期,然后连接回主表(这里我称之为
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

到目前为止,您使用哪种sql语句?如果按
PK
字段排序,记录是否保证按时间顺序排列?如果没有,是否保证每个
日期
-
序列
组合最多只能有一条记录?是否说错了?你说的
不是1
,但那正是你想要返回的。记录不保证按时间顺序排列兔子,你是对的,我提出了一个我赢你输的假设,我编辑了问题的准确性。我已经测试过了,这是返回我期望的结果,谢谢@沃尔夫冈太棒了!请投票并接受!我正试图联系我的1k代表!:)我接受了,并投了赞成票,但我太傻了,不能让它出现;)再次感谢!