时间范围内的唯一计数(打印0)

时间:2013-02-27 18:49:33

标签: sql count sum

我有一个表TB包含Time, User_id, State列,其数据如下。

INSERT INTO TB
  (Time, User_id, State)
VALUES
  (1, 1, 'VA'),
  (1, 2, 'VA'),
  (1, 2, 'DC'),
  (2, 1, 'VA'),
  (2, 2, 'MD'),
  (3, 1, 'MD'),
  (3, 112, 'MD'),
  (3, 134, 'VA'),
  (3, 111, 'MD'),
  (4, 12, 'VA'),
  (4, 22, 'MD')
;

我希望每2秒给User_id State = 'DC'一个唯一的计数。结果应该是这样的:

NewTime | Count  
   1    |  1
   2    |  0

当使用

计数为0时,我得到了打印0的答案
SELECT  TIME,
        SUM(CASE WHEN State = 'DC' THEN 1 ELSE 0 END) Count
FROM    TB
GROUP   BY Time

使用

获取一个时间范围内的唯一计数
SELECT
    ((Time - 1) / 2) + 1 as NewTime,
    COUNT(DISTINCT User_id) as Count
FROM ... 
GROUP BY ((Time - 1) / 2) + 1

但我不确定如何将这两者结合起来得到我想要的结果。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你在找这个:

SELECT
    ((Time - 1) / 2) + 1 as NewTime,
    COUNT(DISTINCT case when state = 'DC' then User_id end) as Count
FROM ... 
GROUP BY ((Time - 1) / 2) + 1

这假设你每两秒钟就有一些记录(虽然不一定是DC)。