PDA

Показать полную графическую версию : агрегация id по дням


kontox
19-10-2017, 14:59
Подскажите, пожалуйста

есть запрос
select id, day
from mytable

как мне агрегировать так, чтобы на выходе было количество уникальных id в день
count day
5 1.09.2017
10 2.09.2017
т.е. первого сентября пришло 5 уникальных id
а второго сентября 10 уникальных id пришло

Iska
19-10-2017, 16:06
Примерно так:
SELECT day, Count(id) AS [Count-id] FROM (SELECT DISTINCT day, id FROM mytable) GROUP BY day;
Сначала Вы оставляете только уникальные записи в парах day/id — «SELECT DISTINCT day, id FROM mytable», затем группируете результат по датам, считая количество id.

kontox
19-10-2017, 16:18
Iska, спасибо
а если в этом запросе есть дополнения
select id, day
from mytable
where day >='02.09.2017' and day <='05.09.2017'
and event ='subject'
and level=40

куда мне вставить конструкцию where
в эти скобки?
(SELECT DISTINCT day, id FROM mytable
where...)

Iska
19-10-2017, 16:54
(SELECT DISTINCT day, id FROM mytable
where...) »
Ну да, как-то так.

kontox
22-10-2017, 17:45
Iska, еще вопрос
подскажите, как сделать чтобы day на выходе был в формате
09-05-2017, а не 09-05-2017 5:34:23

Iska
22-10-2017, 18:09
kontox, у меня отсутствует Microsoft SQL. Попробуйте рассмотреть и опробовать варианты, предложенные, например, здесь: How can I truncate a datetime in SQL Server? - Stack Overflow (https://stackoverflow.com/questions/923295/how-can-i-truncate-a-datetime-in-sql-server).

Busla
22-10-2017, 18:50
kontox, если у вас "day на выходе в формате 09-05-2017 5:34:23", то это, очевидно, и на входе, и не day. И, как следствие, предложенный Iska код работать не будет.

а если в этом запросе есть дополнения
and event ='subject'
and level=40
куда мне вставить конструкцию where »
это зависит от того, как эти "дополнения" влияют на критерий уникальности.




© OSzone.net 2001-2012