2014-01-22 66 views
0

我在同一天有多行,我想要獲取最近五天的最新日期時間。如何使用最近的日期時間查找每天的最新日期時間

id username date 
1 prashant 2013-10-09 05:25:46.000 
2 rohit  2013-10-09 05:26:40.000 
3 sam  2013-10-09 05:33:53.000 
4 sohan  2013-10-09 05:26:15.000 
5 mohan  2013-10-09 05:37:34.000 
+1

你能告訴我們你試過了什麼嗎? –

+0

http://stackoverflow.com/questions/tagged/greatest-n-per-group?sort=votes –

回答

0
SELECT id,name,MAX([date]) 
FROM tableName 
WHERE DATEDIFF(day,[date],GETDATE()) <= 5 
GROUP BY id,name 
0

試試這個

Select ID, 
     Name, 
     Date 
From Table1 
where Date 
    IN (-- we are selecting the latest date for each day 
     SELECT MAX([date])Date 
     FROM Table1 
     GROUP BY DATEPART(dd, [date]) 
    ) 

FIDDLE DEMO

如果你想只對過去的五天裏獲取記錄然後用這個

Select ID, 
     Name, 
     Date 
From Table1 
where Date 
    IN (-- we are selecting the latest date for each day 
     SELECT MAX([date])Date 
     FROM Table1 
     WHERE DATEDIFF(day,[date],GETDATE()) <= 5 
     GROUP BY DATEPART(dd, [date]) 
    ) 

FIDDLE DEMO

0
CREATE TABLE UserDate (
    id INT NOT NULL IDENTITY CONSTRAINT PK_UserDate PRIMARY KEY CLUSTERED 
    ,username nvarchar(50) NOT NULL 
    ,dt datetime 
) 

INSERT INTO UserDate (username, dt) 
VALUES 
('usr1','2013-10-07 05:25:46.000') 
,('usr2','2013-10-08 05:26:40.000') 
,('usr3','2013-10-08 05:33:53.000') 
,('usr4','2013-10-09 05:26:15.000') 
,('usr5','2013-10-09 05:37:34.000') 
,('usr6','2013-10-10 05:25:46.000') 
,('usr7','2013-10-10 05:26:40.000') 
,('usr8','2013-10-11 05:33:53.000') 
,('usr9','2013-10-12 05:26:15.000') 
,('usr10','2013-10-12 05:37:34.000') 

SELECT * FROM UserDate 

;With Last5 as (
SELECT 
    id, 
    username, 
    dt, 
    DENSE_RANK() OVER (ORDER BY CAST(dt as Date) DESC) OrderByDay, 
    ROW_NUMBER() OVER (PARTITION BY CAST(dt as Date) ORDER BY dt DESC) OrderByTime 
FROM UserDate 
) 

SELECT * 
FROM Last5 
WHERE OrderByDay <= 5 
    and OrderByTime = 1 
ORDER BY OrderByDay 
GO