2012-10-09 15 views
6

を選択:私はこのようなレコードを持つテーブルを持っている5最新のSQL Serverの

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)を返します。

私が望む出力を得るにはどうすればよいですか?

+1

は、なぜが '25'リストに含まれていませんでしょうか? –

+1

@JohnWoo同じ質問です。あなたは 'GROUP BY'を使うことができるので、あなたが求めているように結果を得ることはできません。 –

+0

なぜあなたはORDER BYタイムスタンプを使うことができませんか? –

答えて

12

私はこれをテストするために私のサーバーへのアクセス権を持っていますが、いけない

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

仕事ではないのですか?

EDIT:http://sqlfiddle.com/#!6/610c4/2でテストしましたが、私はtimestamptimeを使用していないことに注意してください。適切に修正してください。

+0

今日はオフになっていますが、午前中に最初に試してみます、ありがとう – jere

+1

クールクール。私がテストしたときに私はそれを編集したことに注意してください。私の以前の解決策はうまくいきませんでした。これはすべきです。 – Hotchips

3
SELECT top 5 dose 
FROM table_id 
GROUP BY dose 
ORDER BY max(timestamp) desc 
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

関連する問題