[英]SQL Return the 4 most recent entries for each ID (non-unique)
每个 ID 至少有一组 4 个条目,每个通道 1-4 一个,并且可以用不同的日期重复。
所以 ID 001 可能有 8 个条目,2 个集合,而 ID 002 可能只有 4 个条目,1 个集合。
我想知道是否可以为每个 ID 返回最近的 4 个条目。
Here is my database setup
ID (not unique)
TestTime (datetime)
Channel (Values only 1,2,3 or 4)
Data
例子:
ID TestTime Channel Data
001 2022-09-14 16:42:00 1 2.5
001 2022-09-14 16:46:00 2 3.5
001 2022-09-14 16:50:00 3 1.5
001 2022-09-14 16:56:00 4 4.5
002 2022-09-13 16:42:00 1 0.5
002 2022-09-13 16:46:00 2 2.5
002 2022-09-13 16:50:00 3 1.5
002 2022-09-13 16:56:00 4 3.5
001 2022-09-12 16:42:00 1 1.5
001 2022-09-12 16:46:00 2 0.5
001 2022-09-12 16:50:00 3 1.5
001 2022-09-12 16:56:00 4 2.5
目标 Output:
ID TestTime Channel Data
002 2022-09-13 16:42:00 1 0.5
002 2022-09-13 16:46:00 2 2.5
002 2022-09-13 16:50:00 3 1.5
002 2022-09-13 16:56:00 4 3.5
001 2022-09-14 16:42:00 1 2.5
001 2022-09-14 16:46:00 2 3.5
001 2022-09-14 16:50:00 3 1.5
001 2022-09-14 16:56:00 4 4.5
可以按 TestTime 升序或降序排序。
您可以在数据集上使用子查询来隔离每个 ID 的四个最近日期:
DECLARE @Table TABLE (ID NVARCHAR(3), TestTime DATETIME, Channel TINYINT, Data DECIMAL(4,2))
INSERT INTO @Table (ID, TestTime, Channel, Data) VALUES
('001', '2022-09-14 16:42:00', 1, 2.5),
('001', '2022-09-14 16:46:00', 2, 3.5),
('001', '2022-09-14 16:50:00', 3, 1.5),
('001', '2022-09-14 16:56:00', 4, 4.5),
('002', '2022-09-13 16:42:00', 1, 0.5),
('002', '2022-09-13 16:46:00', 2, 2.5),
('002', '2022-09-13 16:50:00', 3, 1.5),
('002', '2022-09-13 16:56:00', 4, 3.5),
('001', '2022-09-12 16:42:00', 1, 1.5),
('001', '2022-09-12 16:46:00', 2, 0.5),
('001', '2022-09-12 16:50:00', 3, 1.5),
('001', '2022-09-12 16:56:00', 4, 2.5)
SELECT t.*
FROM @Table t
INNER JOIN (SELECT ID, TestTime, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TestTime DESC) AS rn FROM @Table) a
ON t.ID = a.ID
AND t.TestTime = a.TestTime
AND rn <= 4
ID TestTime Channel Data
----------------------------------------
001 2022-09-14 16:42:00.000 1 2.50
001 2022-09-14 16:46:00.000 2 3.50
001 2022-09-14 16:50:00.000 3 1.50
001 2022-09-14 16:56:00.000 4 4.50
002 2022-09-13 16:42:00.000 1 0.50
002 2022-09-13 16:46:00.000 2 2.50
002 2022-09-13 16:50:00.000 3 1.50
002 2022-09-13 16:56:00.000 4 3.50
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.