Sql 如何限制为每个设备选择x个最后几天的结果
我想将此选择的每个设备Id&Id的最后天数限制为x天:Sql 如何限制为每个设备选择x个最后几天的结果,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我想将此选择的每个设备Id&Id的最后天数限制为x天: SELECT DeviceId, Id, MAX(DateAndTime) as 'DateAndTime' FROM EventAndMessage GROUP BY DeviceId, Id ORDER BY DateAndTime DESC` 结果示例: DeviceId Id DateAndTime 00:11:22:33:44:55 00D330 2018-05-25 15:41:10.62
SELECT DeviceId, Id, MAX(DateAndTime) as 'DateAndTime'
FROM EventAndMessage
GROUP BY DeviceId, Id
ORDER BY DateAndTime DESC`
结果示例:
DeviceId Id DateAndTime
00:11:22:33:44:55 00D330 2018-05-25 15:41:10.620
00:03:4F:00:10:94 027286 2018-05-11 09:23:26.927
00:03:4F:00:10:94 0351DE 2018-05-11 09:23:13.690
00:03:4F:00:10:94 0351DE 2018-05-11 09:23:09.747
00:03:4F:00:10:94 0351DE 2018-05-11 09:23:01.797
00:03:4F:00:10:94 0351C4 2018-05-11 09:22:47.633
在本例中,我希望最多限制2条最年轻的记录。
注:2应该是我可以更改的参数
正确的结果应该是:
DeviceId Id DateAndTime
00:11:22:33:44:55 00D330 2018-05-25 15:41:10.620
00:03:4F:00:10:94 027286 2018-05-11 09:23:26.927
00:03:4F:00:10:94 0351DE 2018-05-11 09:23:13.690
00:03:4F:00:10:94 0351DE 2018-05-11 09:23:09.747
00:03:4F:00:10:94 0351C4 2018-05-11 09:22:47.633
谢谢Oracle 12c及以上版本-
SELECT DeviceId, Id, MAX(DateAndTime) as 'DateAndTime'
FROM EventAndMessage
GROUP BY DeviceId, Id
ORDER BY DateAndTime DESC
FETCH FIRST X ROWS ONLY;
取决于RDBMS,请参阅jspcal链接,但请记住,像Oracle的rownum这样的东西不能很好地与group/orderSelect top配合使用,这不是我想要的。我可能解释得不对。对于每个元组DeviceID和Id,我希望有最后的x记录。谢谢,我正在sql server上运行:-(