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代表!:)我接受了,并投了赞成票,但我太傻了,不能让它出现;)再次感谢!