2015-10-26 78 views
1

我有一張原始表格,記錄客戶在特定時間段內進入商店的ID。使用Impala,我想計算每天到店鋪的不同客戶ID的數量。 (例如,第3天,5個不同的客戶訪問至今)如何在一段時間內獲取不同值的計數Impala/SQL?

這裏是原始表的一個簡單的例子,我有:

Day ID 
1 1234 
1 5631 
1 1234 
2 1234 
2 4456 
2 5631 
3 3482 
3 3452 
3 1234 
3 5631 
3 1234 

這裏是我想獲得:

Day Count(distinct ID) until that day 
1  2 
2  3 
3  5 

是否有方法可以在單個查詢中輕鬆完成此操作?

+0

'(例如,第3天,5個不同的客戶訪問至今)'id表示客戶對嗎?你怎麼能說5個不同的客戶訪問當商店1234在第3天訪問了兩次。您預期的結果不會真正跟隨您想說的話。 – brenners1302

+0

從開始(從第1天到第3天),您只需計入一次客戶1234。直到第3天,我正在查找計數(明顯ID) – KTY

+0

然後,第2天的計數應該是1.而第3天,計數應該是2.這就是爲什麼我說你的預期結果不符合你想說的話。 – brenners1302

回答

3

不是100%肯定,如果將在黑斑羚

工作,但如果你有一個表天。或者,如果您有辦法在飛羚上快速創建衍生表格。

CREATE TABLE days ("DayC" int); 

INSERT INTO days 
    ("DayC") 
VALUES (1), (2), (3); 

OR

CREATE TABLE days AS 
    SELECT DISTINCT "Day" 
    FROM sales 

您可以使用此查詢

SqlFiddleDemo在PostgreSQL

SELECT "DayC", COUNT(DISTINCT "ID") 
FROM sales 
cross JOIN days 
WHERE "Day" <= "DayC" 
GROUP BY "DayC" 

輸出

| DayC | count | 
|------|-------| 
| 1 |  2 | 
| 2 |  3 | 
| 3 |  5 | 

UPDATE VERSION

SELECT T."DayC", COUNT(DISTINCT "ID") 
FROM sales 
cross JOIN (SELECT DISTINCT "Day" as "DayC" FROM sales) T 
WHERE "Day" <= T."DayC" 
GROUP BY T."DayC" 
-1

試試這個:

select day, count(distinct(id)) from yourtable group by day 
+0

這隻會給出每天不同ID的數量。我需要在每天(從第1天開始)之前統計不同的ID。 – KTY

+0

Impala不允許您從不屬於您的Group By語句的列中進行選擇。這是可笑的... – SummerEla

相關問題