我有下表:
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
答案 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]