选择不同的行,同时按最大值分组

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()`*是*ANSI标准SQL.问题是,没有真正的数据库真正实现标准. (2认同)

And*_*mar 7

在支持分析功能的数据库中,您可以使用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)