2013-02-17 46 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