6

次のようなレコードを含むテーブルがあります。

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) が返されます。

必要な出力を得るには何を使用すればよいですか?

4

3 に答える 3

12

これをテストするためにサーバーにアクセスできませんが、すべきではありません

SELECT TOP 5 dose 
FROM table_id 
GROUP BY dose 
ORDER BY max(time) desc;

仕事?

編集: http://sqlfiddle.com/#!6/610c4/2でテストしました。timestamp単にtime. 適宜修正してください。

于 2012-10-09T03:54:44.993 に答える
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

ここに画像の説明を入力

于 2012-10-09T10:56:46.253 に答える
3
SELECT top 5 dose
FROM table_id
GROUP BY dose
ORDER BY max(timestamp) desc
于 2012-10-09T04:07:44.350 に答える