2012-10-09 23 views
6

böyle kayıtlarında bir tablo vardır:5 En son 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 

Ne yani bu durumda sorgu gerektiği, belirli bir ilaç için son 5 kullanılan doz değerlerini seçmek yapmak istediğim 35, 25, 20, 15, 05.

En son 5 girişi almak için TOP ve ORDER BY'i kullanabileceğimi biliyorum, ancak bu durumda çiftleri (35, 35, 25, 25, 25) döndürecektir.

İstediğim çıktıyı almak için ne kullanmalıyım?

+1

, neden 'listesinde yer almayan 25' edilir mi? –

+1

@JohnWoo Aynı soru, çünkü 'GROUP BY' kullanabiliyorsunuz çünkü sonuçları istediğiniz gibi elde edemiyorsunuz .. –

+0

neden zaman damgası SİPARİŞ ETMİYORSUNUZ? –

cevap

12

Bunu test etmek benim sunucuya erişimi, ama olmamalı

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

eser yok?

DÜZENLEME: http://sqlfiddle.com/#!6/610c4/2 üzerinde test edilmiştir, timestamp'u time kullanmamış olduğumu unutmayın. Uygun şekilde düzeltin.

+0

im gün için kapalı, ama sabah ilk şey dener, teşekkürler – jere

+1

Cool cool. Test ettiğimde düzenlediğimi ve önceki çözümümün işe yaramadığını bulduğumu unutmayın. Bu olmalı. – Hotchips

3
SELECT top 5 dose 
FROM table_id 
GROUP BY dose 
ORDER BY max(timestamp) desc 
3

bu yardım arada

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