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
)-因此每个“分区”的最新事件hasRowNum=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 (........)