0

以下のようなデータを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

しかし、これら2つを組み合わせて、希望する結果を得る方法がわかりません。

前もって感謝します。

4

1 に答える 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

これは、2秒ごとに(必ずしもDCである必要はありませんが)何らかのレコードがあることを前提としています。

于 2013-02-27T19:02:34.800 に答える