2015-10-26 2 views
1

У меня есть исходный идентификатор клиентов таблицы, поступающий в магазин за определенный период времени. Используя Impala, я хотел бы рассчитать количество различных идентификаторов клиентов, поступающих в магазин до каждого дня. (Например, на 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 различных клиентов посетили до сих пор)' идентификатор представляет собой право клиента? Как вы можете сказать, что 5 различных клиентов посетили магазин, когда 1234 дважды посетили в день 3. Вы ожидали, что результаты действительно не соответствуют тому, что вы пытаетесь сказать. – brenners1302

+0

С самого начала (с 1-го дня до 3-го дня) вам нужно только один раз подсчитать клиента 1234. Я ищу счет (отдельный идентификатор) до 3-го дня – KTY

+0

Тогда счет на 2-й день должен быть 1. и на третий день счет должен быть 2. Вот почему я говорю, что ожидаемые результаты не соответствуют тому, что вы пытаетесь сказать. – brenners1302

ответ

3

Не 100% уверен, что если будет работать на импала

Но если у вас есть таблица дней. Или если у вас есть способ создать деривативную таблицу «на лету» на импале.

CREATE TABLE days ("DayC" int); 

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

ИЛИ

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

. Это просто даст количество разных идентификаторов в каждый день. Мне нужно подсчитывать различные идентификаторы UNITL каждый день (начиная с 1-го дня). – KTY

+0

Impala не позволяет вам выбирать из столбцов, не входящих в оператор Group By. Что смешно ... – SummerEla

Смежные вопросы