2013-02-27 34 views
0

我有一个表TB包含列Time, User_id, State,其数据如下。时间范围内的唯一计数(打印0)

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') 
; 

我想给State = 'DC'每2秒的User_id独特的计数。结果应该看起来像这样:

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

您正在寻找这样的:

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)每两秒钟。

+0

工作就像一个魅力。非常感谢! – Firyn 2013-02-27 19:18:16