Sql 如何限制为每个设备选择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

我想将此选择的每个设备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.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上运行:-(