let*_*ngo 7 sql sql-server-2008 greatest-n-per-group
我目前有下表:
ID | Name | EventTime | State
1001 | User 1 | 2013/07/22 00:00:05 | 15
1002 | User 2 | 2013/07/23 00:10:00 | 100
1003 | User 3 | 2013/07/23 06:15:31 | 35
1001 | User 1 | 2013/07/23 07:13:00 | 21
1001 | User 1 | 2013/07/23 08:15:00 | 25
1003 | User 3 | 2013/07/23 10:00:00 | 22
1002 | User 2 | 2013/07/23 09:18:21 | 50
Run Code Online (Sandbox Code Playgroud)
我需要的是state每个userid与上一个eventtime相似的不同之处:
ID | Name | EventTime | State
1001 | User 1 | 2013/07/23 08:15:00 | 25
1003 | User 3 | 2013/07/23 10:00:00 | 22
1002 | User 2 | 2013/07/23 09:18:21 | 50
Run Code Online (Sandbox Code Playgroud)
我需要类似下面的东西,但我不能得到我需要的东西.
SELECT ID, Name, max(EventTime), State
FROM MyTable
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
fan*_*nts 11
SELECT
ID, Name, EventTime, State
FROM
MyTable mt
WHERE EventTime = (SELECT MAX(EventTime) FROM MyTable sq WHERE mt.ID = sq.ID)
Run Code Online (Sandbox Code Playgroud)
在支持分析功能的数据库中,您可以使用row_number():
select *
from (
select row_number() over (partition by ID
order by EventTime desc) as rn
, *
from YourTable
) as SubQueryAlias
where rn = 1
Run Code Online (Sandbox Code Playgroud)