0

我有下表:

Id      revenue LogAt       playlog LogAt     creds playlog Id
9673648 26.02.2013 13:46    26.02.2013 13:37    13  178849374
9673648 26.02.2013 13:46    26.02.2013 13:38    13  178849795
9673648 26.02.2013 13:46    26.02.2013 13:39    13  178850630
9673648 26.02.2013 13:46    26.02.2013 13:41    13  178851326
9673648 26.02.2013 13:46    26.02.2013 13:33    13  178847056
9673648 26.02.2013 13:46    26.02.2013 13:34    13  178847796
9673648 26.02.2013 13:46    26.02.2013 13:36    13  178848715
9673648 26.02.2013 13:46    26.02.2013 13:32    13  178846609
9673648 26.02.2013 13:46    26.02.2013 13:32    13  178846250

它实际上要长得多,有更多的 Id“组”,像这个一样多次列出,每个组的唯一区别是播放日志登录时间和播放日志 ID。

现在在给定的示例中,我需要选择 playlog logat 的时间为 13:41 的行。此外,对于所有其他 id 组,我需要具有“最新”播放日志 logat 行的行。在所有这些行中,信用应该总结起来。

我认为我必须通过时间为每组 id 过滤这 1 行,但我不知道如何。也许有 min()/max() 的东西?

我的 rdbms 是 Microsoft sql server management studio。

该表是以下联接的结果:

select *
from credits
inner join user on credits.userid = user.id
inner join sessionlog on user.id = sessionlog.userid
inner join playlog on sessionlog.id = playlog.sessionlogid
4

1 回答 1

1

我会计算playlog logatCTE 或子查询的最大值,然后将其连接到整个表以获取其余的行数据。

WITH max_cte
AS
(
  SELECT Id, MAX([playlog LogAt]) AS MaxLogAt
  FROM tablename
  GROUP BY Id
)
SELECT max_cte.Id, max_cte.MaxLogAt, 
  tablename.[revenue LogAt], tablename.creds, tablename.[playlog Id]
FROM max_cte
INNER JOIN tablename
  ON max_cte.Id = tablename.Id
  AND max_cte.MaxLogAt = tablename.[playlog LogAt]
于 2013-03-04T14:01:34.170 回答