1

このようなテーブルがあります

Time   |  user_id
12100  |    23
12100  |    23
12100  |    22
12100  |    19
12100  |    20
...
12160  |    273
12160  |    223
12160  |    1223
...

時間は秒単位です。1分以内に一意のuser_idの数を取得し、結果テーブルを次のようにする方法を探しています

Minute  |  Count
  1     |  36
  2     |  100
...

12100 から始まるとすると、1 分目は から12100 ~ 12159、2 分目は から12160 to 12219です。

助けていただければ幸いです。

更新:(これは私が試したものですが、カウントに重複が含まれているようです)

SELECT ROW_NUMBER() OVER (ORDER BY [Time]) AS [Row]
        , [Time]
        , COUNT(DISTINCT([user_id])) as [Count]
    INTO [table].[dbo].[temp]
  FROM [db].[dbo].[table]
  GROUP BY [Time]

  SELECT t.[Minute], SUM(t.[Count]) AS [Count]
    FROM
    (SELECT (ROW_NUMBER() OVER (ORDER BY [Row]) + 59)/60 AS [Minute]
            , SUM([Count]) AS [Count]
        FROM [db].[dbo].[temp]
        GROUP BY [Row]) AS t
    GROUP BY t.[Minute]
    ORDER BY t.[Minute]

DROP TABLE [db].[dbo].[temp]
4

1 に答える 1

3

時間を目標の分数に変換する式を作成し、それによってグループ化します。

select
    ((Time - 12000) / 60) + 1 as Minute,
    count(distinct user_id) as Count
from ... 
group by ((Time - 12000) / 60) + 1
于 2013-02-17T00:51:11.327 に答える