powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод отчета
4 сообщений из 4, страница 1 из 1
вывод отчета
    #39275724
tadeyiloda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица-лог
туда пишется ид юзера,действие (поел,попил),дата действия
затем я хочу вывести отчет

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

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

вопрос-как проще это делать? 1 запросом я так понимаю не обойдется?
...
Рейтинг: 0 / 0
вывод отчета
    #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
вывод отчета
    #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
вывод отчета
    #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
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / вывод отчета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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