2013-02-17 48 views
1

的我有這樣計數獨特的值之內的時間範圍

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

時間的表是秒。我正在尋找一種方式來獲得獨特的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] 
+0

你嘗試過什麼嗎? – 2013-02-17 00:46:41

+0

是的,我做到了。我每秒做一次,並將它們組合在一起以獲得一分鐘的總計數,但我忘記了可能存在user_id重疊。 – Firyn 2013-02-17 00:48:20

+0

發佈查詢你試過了什麼。 – 2013-02-17 00:49:37

回答

3

創建原來的時間到你的目標分鐘數的表達和組由:

select 
    ((Time - 12000)/60) + 1 as Minute, 
    count(distinct user_id) as Count 
from ... 
group by ((Time - 12000)/60) + 1 
+0

對我來說很好。 – 2013-02-17 00:52:31

+0

看起來不錯 - 我不認爲你可以在SQL Server中按1分組 - 改變你的表達,這應該工作。 – sgeddes 2013-02-17 00:57:10

+0

@sgeddes Thx。不知道有關SQL服務器(我從來沒有使用它) – Bohemian 2013-02-17 00:58:39