|
|
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
Салют! Мой первый пост. В mytable ведется журнал учета различных событий Поля id, create_time как datetime и несколько полей признаков. По некоторому условию1 нужно посчитать количество событий по дням за несколько последних дней. Следующая конструкция работает без нареканий: Код: sql 1. 2. 3. 4. Задача усложняется, если число событий нужно подсчитать по нескольким условиям: условие1, условие2 и т.д. Получился такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Внешний оберточный селект нужен, чтобы работала конструкция USING (date) в джойнах (без него у меня не получилось). Первый подзапрос (AS a) строит исчерпывающий список нужных дат. Если понадобится еще условие, просто добавляем очередной LEFT JOIN. Запрос вполне работающий, но есть сомнения в его производительности. Да и трижды строить одну и ту же выборку по create_time > CURRENT_DATE - INTERVAL 30 DAY как-то не комильфо. Можно ли как-нибудь улучшить запрос? И еще вопрос до кучи: эквивалентны ли функции DATE_FORMAT(create_time,'%Y-%m-%d') и LEFT(create_time, 10)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2016, 10:30 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2016, 10:46 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, вот жеж блин, читал этот топик, но не понял, что это про меня ) Сенкс! Итог: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2016, 12:33 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
Захотелось к предыдущему результату добавить строчку с Итого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В принципе конструкция рабочая, но, подозреваю, дважды считать одно и тоже по одной и той же выборке - неправильно. Подскажите более красивый вариант, ну или сделайте Тынц, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 09:09 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
GROUP BY ... WITH ROLLUP? http://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 09:13 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
AkinaGROUP BY ... WITH ROLLUP? Ух ты, какая прелесть ) В качестве технического решения проходит, но появилась другая проблема. В реале у меня используется другой запрос (для OTRS, если что): Код: sql 1. 2. 3. 4. 5. 6. 7. В итоговой строке столбец agent_fullname содержит не NULL, который можно обработать как в примере по ссылке: SELECT IFNULL(year,"Total") as year, а ФИО агента из последней строки основного результата запроса. Ну, типа: Код: plaintext 1. Можно победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 09:50 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
With Rollup ориентируется на выражение группировки, а не на поле выходного набора. Хочешь там видеть Null - группируй по выводимому выражению, а не по другому полю. Или добавь поле группировки в выходной набор и ориентируйся на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 10:37 |
|
||
|
Несколько группировок по дате в одной таблице
|
|||
|---|---|---|---|
|
#18+
Ага, спасибо. Или добавь поле группировки в выходной набор и ориентируйся на него. Да, но все равно в итоговой строке выводится фамилия агента, а это нехорошо Поставил в группировку agent_fullname вместо h.create_by (почему-то не думал, что так можно), получил в нужном месте NULL. Правда заменить его на Total (как в примере с SELECT IFNULL(year,"Total") as year) не получилось. Вариант SELECT IFNULL(concat(u.last_name, ' ', u.first_name),"Total") as agent_fullname проходит без ошибок, но NULL на Total не меняет ( Подозреваю, что эту последнюю строчку можно как-то подправить в HAVING. Если да, то как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2016, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39343150&tid=1831236]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 477ms |

| 0 / 0 |
