SELECT 5最新的SQL Server

时间:2012-10-09 03:51:29

标签: sql sql-server tsql sql-server-2012

我有一张包含这样记录的表格:

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)。

我应该使用什么来获得我想要的输出?

3 个答案:

答案 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

enter image description here