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 の他のすべてのグループについては、「最新の」playlog logat 行を含む行が必要です。これらすべての行のうち、creds を合計する必要があります。

IDのグループごとにこの1行をフィルタリングする必要があると思いますが、方法がわかりません。多分min()/max()で何か?

私の rdbms は、Microsoft sql サーバー管理スタジオです。

テーブルは、次の結合の結果です。

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

CTE またはサブクエリとして最大値を計算し、playlog logatそれを完全なテーブルに結合して、残りの行データを取得します。

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 に答える