选择特定行时出现问题

时间:2013-03-04 13:28:20

标签: sql sql-server rows

我有下表:

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”的“群组”被列出多次像这样,每组的唯一区别是playlog logat时间和playlog id。

现在在给定的例子中,我需要选择playlog logat在13:41定时的行。 另外,对于所有其他id的组,我需要带有“最新”playlog logat行的行。 在所有这些行中,信誉应该总结。

我认为我必须为每一组id过滤这一行,但我不知道如何。 也许是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

1 个答案:

答案 0 :(得分:1)

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

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]