2015-06-14 56 views
-1

我有如下表最新的两个日期时间在SQL Server

CREATE TABLE [dbo].[events] 
(
    [event_id] [nvarchar](50) NULL, 
    [event_timestamp] [datetime] NULL, 
    [reading] [int] NULL 
) ON [PRIMARY] 

与以下数据和resutls

表:events

event_id event_timestamp Reading 
--------------------------------- 
1200  14-Jun-15   1500 
1200  13-Jun-15   1430.7 
1200  12-Jun-15   1400.9 
1200  11-Jun-15   1333.2 
1200  10-Jun-15   1233.7 
1330  14-Jun-15   1490 
1330  13-Jun-15   1300 
1330  12-Jun-15   1200 
1330  11-Jun-15   1150 
1330  10-Jun-15   1000 
1347  14-Jun-15   2700 
1347  13-Jun-15   2400 
1347  12-Jun-15   2350 
1347  11-Jun-15   2300 
1347  10-Jun-15   2100 

结果应该是

要求的结果:

event_id event_timestamp Reading 
-------------------------------------- 
1200  14-Jun-15   1500 
1200  13-Jun-15   1430.7 
1330  14-Jun-15   1490 
1330  13-Jun-15   1300 
1347  14-Jun-15   2700 
1347  13-Jun-15   2400 

回答

2

随着row_number功能:

with cte as(select *, row_number() over(partition by event_id 
         order by event_timestamp desc) rn from events) 
select * from cte where rn <= 2 
+0

非常感谢@Giorgi Nakeuri –

+0

与CTE为(选择的itemid,DT,信息,ROW_NUMBER()以上(分区由itemid的顺序由DT DESC)RN 从(选择的itemid,DT,MAX(信息) ( )SELECT event_item_id itemid,CONVERT(VARCHAR,event_timestamp,111)dt,event_additional_info info FROM dbo.events WHERE CONVERT(VARCHAR,event_timestamp,111)IN( SELECT Distinct(CONVERT(VARCHAR,event_timestamp,111))FROM dbo.events WHERE event_additional_info!='0.000000') )tbl1 GROUP BY itemid,dt )tbl) select * from cte where rn <= 2 ORDER BY itemid DESC,dt DESC –

0

@Giorgi Nakeuri,非常感谢你的帮助,我得到了它。

with cte as(select itemid, dt, info, row_number() over(partition by itemid order by dt desc) rn 
from (SELECT itemid, dt, MAX(info) info from(
SELECT event_item_id itemid,CONVERT(VARCHAR, event_timestamp, 111) dt, Reading info 
FROM dbo.events WHERE CONVERT(VARCHAR, event_timestamp, 111) IN ( 
SELECT Distinct(CONVERT(VARCHAR, event_timestamp, 111))FROM dbo.events 
WHERE Reading !='0.000000') 
) tbl1 GROUP BY itemid, dt 
) tbl) 
select * from cte where rn <= 2 ORDER BY itemid DESC, dt DESC