我有一张包含这样记录的表格:
id timestamp dose drug_id
1 2012-10-04 09:10:54 05 2
1 2012-10-04 09:12:34 15 2
1 2012-10-04 09:15:12 20 2
1 2012-10-04 09:35:32 25 2
1 2012-10-04 09:37:34 25 2
1 2012-10-04 09:39:24 25 2
1 2012-10-04 09:42:16 35 2
1 2012-10-04 09:43:07 35 2
我想要做的是选择给定药物的最后5个使用剂量值,因此在这种情况下,查询应返回 35,25,20,15,05 。
我知道我可以使用TOP和ORDER BY来获取最新的5个条目,但在这种情况下它将返回重复项(35,35,25,25,25)。
我应该使用什么来获得我想要的输出?
答案 0 :(得分:12)
我无法访问我的服务器来测试它,但不应该
SELECT TOP 5 dose
FROM table_id
GROUP BY dose
ORDER BY max(time) desc;
工作?
编辑:在http://sqlfiddle.com/#!6/610c4/2上进行了测试,请注意我还没有使用timestamp
time
。适当修复。
答案 1 :(得分:3)
SELECT top 5 dose
FROM table_id
GROUP BY dose
ORDER BY max(timestamp) desc
答案 2 :(得分:3)
这会有帮助吗
DECLARE @T TABLE(ID INT,Time_Stamp DATETIME,Dose INT, Drug_Id INT)
INSERT INTO @T VALUES
(1,'2012-10-04 09:10:54',05,2),
(1,'2012-10-04 09:12:34', 15,2),
(1,'2012-10-04 09:15:12',20,2),
(1,'2012-10-04 09:35:32',25,2),
(1,'2012-10-04 09:37:34',25,2),
(1,'2012-10-04 09:39:24',25,2),
(1,'2012-10-04 09:42:16',35,2),
(1,'2012-10-04 09:43:07',35,2)
;WITH CTE AS(
SELECT *, Rn = ROW_NUMBER()OVER(PARTITION BY Dose ORDER BY Time_Stamp DESC)
FROM @T)
SELECT TOP 5 ID,Time_Stamp,Dose,Drug_Id
FROM CTE
WHERE Rn = 1
ORDER BY Dose DESC