Sql server 具有最新日期的SQL Server行

Sql server 具有最新日期的SQL Server行,sql-server,Sql Server,我有一张桌子: EventLog ( EventID (INT), UserID (VARCHAR(50), Event (NTEXT), EventDate(DateTime), DocuvmentID(INT) ) 我需要编写一个查询来获取最新的事件,一组用户ID的datetime,这将是 WHERE UserID IN ( 'john','tom'...etc) 我如何才能做到这一点?使用简单的CTE: SELECT y.UserID, y.Ev

我有一张桌子:

EventLog (
    EventID (INT),
    UserID (VARCHAR(50),
    Event (NTEXT),
    EventDate(DateTime),
    DocuvmentID(INT)
)
我需要编写一个查询来获取最新的事件,一组用户ID的datetime,这将是

WHERE UserID IN ( 'john','tom'...etc)
我如何才能做到这一点?

使用简单的CTE:

SELECT y.UserID, y.Event, y.EventDate
    FROM (SELECT UserId, MAX(EventDate) AS MaxDate
              FROM YourTable
              WHERE UserId IN ('john','tom',...)
              GROUP BY UserId) t
        INNER JOIN YourTable y
            ON t.UserId = y.UserId
                AND t.MaxDate = y.EventDate
;WITH LatestDates AS
(SELECT 
    EventID, UserID,
    Event, EventDate,
    DocumentID,
    ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY EventDate DESC) AS 'RowNum'
)
SELECT * 
FROM LatestDates
WHERE RowNum = 1 AND UserID IN (........)

这会根据一些标准对数据进行分区(我选择了
UserID
作为一个选项-可能对您来说是另一个选项),然后从1开始按顺序对每个组进行编号,并根据另一个标准进行排序(此处:
EventDate DESC
)-因此每个“分区”的最新事件has
RowNum=1
这是我从该CTE中选择的,我只是想澄清一下-您的SQL正在被传递一个以逗号分隔的用户ID列表,您希望为每个用户查找最新的事件吗?
;WITH LatestDates AS
(SELECT 
    EventID, UserID,
    Event, EventDate,
    DocumentID,
    ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY EventDate DESC) AS 'RowNum'
)
SELECT * 
FROM LatestDates
WHERE RowNum = 1 AND UserID IN (........)