Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод отчета / 4 сообщений из 4, страница 1 из 1
18.07.2016, 15:46
    #39275724
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод отчета
есть таблица-лог
туда пишется ид юзера,действие (поел,попил),дата действия
затем я хочу вывести отчет

------------------------------------------------------юзер1--------------юзер2------------
поел
этот месяц----------------------------------------1----------------------2
прошлый мес------------------------------------33--------------------33
2 мес назад

попил
этот месяц
прошлый мес
2 мес назад

вопрос-как проще это делать? 1 запросом я так понимаю не обойдется?
...
Рейтинг: 0 / 0
18.07.2016, 16:39
    #39275766
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод отчета
tadeyiloda,

postgresql 9.4 или выше, версии ниже - извращаться по старинке sum(case when datetime >= '2016-07-01' then 1 else 0 end)
Код: sql
1.
2.
3.
4.
5.
select user_id, action,
    count(0) filter(datetime >= '2016-07-01') as cur_month,
    count(0) filter(datetime >= '2016-06-01' and datetime < '2016-07-01') as prev_month
from tablename
group by user_id, action



Соответственно, на приложении переформатируете эту аггрегацию в нужный вид.
...
Рейтинг: 0 / 0
18.07.2016, 16:43
    #39275771
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод отчета
Ах, я раздел перепутал, извиняюсь.

На mysql тоже можно, но соответственно только через case
Код: sql
1.
2.
3.
4.
5.
select user_id, action,
    sum(case when datetime >= '2016-07-01' then 1 else 0 end) as cur_month,
    sum(case when datetime >= '2016-06-01' and datetime < '2016-07-01' then 1 else 0 end) as prev_month
from tablename
group by user_id, action
...
Рейтинг: 0 / 0
18.07.2016, 16:47
    #39275774
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод отчета
Melkij
Код: sql
1.
sum(case when datetime >= '2016-07-01' then 1 else 0 end)

Это можно упростить:
Код: sql
1.
SUM(datetime >= '2016-07-01')



А вообще исходная задача не имеет прямого решения одним запросом, т.к. в запросе всегда должны быть явно перечислены поля результата (за исключением звездочки, но тут она не поможет).
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод отчета / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]