powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SQL Count, group by date
5 сообщений из 5, страница 1 из 1
SQL Count, group by date
    #39248855
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток форумчане!
Ситуация:
1. Сначала запросом
Код: sql
1.
SELECT Count(*) as total,client_id,user_clients.name from assist,user_clients where assist.client_id=user_clients.code and assist.crt_date like '$curYear%' group by client_id order by total DESC limit 20


получаю список из 20-ти клиентов по которым за указанный в фильтре год, было бОльшее количество случаев.
2. Далее запросом:
Код: sql
1.
2.
3.
4.
5.
6.
"SELECT DATE_FORMAT(assist.crt_date, '%Y-%m') as 'year',Count(*) as total,user_clients.name
FROM 
    assist,user_clients
WHERE 
    user_clients.code=assist.client_id and assist.client_id!=0 and assist.client_id IN ($str)
GROUP BY DATE_FORMAT(assist.crt_date, '%Y-%m'),client_id order by total,user_clients.name,year ASC";


где $str - список client_id из первого запроса, получаю таблицу с количеством случаев по месяцам.
Не устраивает формат этой таблицы, нужно получить данные в виде:
Date client1_name client2_name clinentX_name
2015-01 count() count() count()
2015-02
Т.е. уникальные значения строк user_clients.name должны стать столбцами,в столбце date - только уникальные значения месяца ну и количество событий. Возможно ли это сделать? Смотрел в сторону представлений, но пока не получилось ничего с ними реализовать.
...
Рейтинг: 0 / 0
SQL Count, group by date
    #39248878
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
necoro,

pivot
...
Рейтинг: 0 / 0
SQL Count, group by date
    #39249156
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
retvizan,
спасибо за пинок в нужную сторону )
в итоге php часть выглядит так
Код: php
1.
$for_querry .= "SUM(CASE WHEN (assist.client_id=" . $item['client_id'] . " and assist.crt_date like '$curYear%')THEN 1 ELSE 0 END) as `" . $item['name'] . "`,";


итоговый запрос получается таким:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT DATE_FORMAT(assist.crt_date, '%Y-%m') as 'year',
SUM(CASE WHEN (assist.client_id=14385 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_14385`,
SUM(CASE WHEN (assist.client_id=16550 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_16550`,
SUM(CASE WHEN (assist.client_id=15918 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_15918`,
SUM(CASE WHEN (assist.client_id=8663 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_8663`,
SUM(CASE WHEN (assist.client_id=16176 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_16176`,
SUM(CASE WHEN (assist.client_id=15154 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_15154`,
SUM(CASE WHEN (assist.client_id=13444 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_13444`,
SUM(CASE WHEN (assist.client_id=16315 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_16315`,
SUM(CASE WHEN (assist.client_id=26448 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_26448`,
SUM(CASE WHEN (assist.client_id=17581 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_17581`,
SUM(CASE WHEN (assist.client_id=15151 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_15151`,
SUM(CASE WHEN (assist.client_id=15155 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_15155`,
SUM(CASE WHEN (assist.client_id=23294 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_23294`,
SUM(CASE WHEN (assist.client_id=20042 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_20042`,
SUM(CASE WHEN (assist.client_id=26411 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_26411`,
SUM(CASE WHEN (assist.client_id=16002 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_16002`,
SUM(CASE WHEN (assist.client_id=20059 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_20059`,
SUM(CASE WHEN (assist.client_id=21257 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_21257`,
SUM(CASE WHEN (assist.client_id=26490 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_26490`,
SUM(CASE WHEN (assist.client_id=27631 and assist.crt_date like '2016%')THEN 1 ELSE 0 END) as `for_test_27631`
FROM 
    assist
where assist.crt_date like '2016%'   
GROUP BY DATE_FORMAT(assist.crt_date, '%Y-%m'),year ASC
...
Рейтинг: 0 / 0
SQL Count, group by date
    #39249293
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
necoro
Код: sql
1.
and assist.crt_date like '2016%'

Этот фрагмент явно можно убрать. WHERE других данных не пропустит.

И еще чуток упростить можно:
necoro
Код: sql
1.
SUM(assist.client_id=14385) as `for_test_14385`,
...
Рейтинг: 0 / 0
SQL Count, group by date
    #39250002
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не буду поднимать новую тему, так как вопрос похож.
Есть таблица assistfin, в ней строки с множеством дат, нужно посчитать статистику по этим датам за год
Делаю такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT DATE_FORMAT(assistfin.crt_date, '%Y-%m') as 'year',
    Count(assistfin.crt_date) as 'Created',
    Count(assistfin.tobilling_date) as 'Passed',
    Count(assistfin.sent_to_client) as 'To client',
    Count(assistfin.dop_prov) as 'To prov'
FROM 
    assistfin 
WHERE 
   assistfin.crt_date like '$curYear%' 
GROUP BY DATE_FORMAT(assistfin.crt_date, '%Y-%m') ASC



но он вполне логично не дает правильной картины по работе отдела. Created - единственное, что считается правильно, по всем остальным есть расхождения, так как crt_date может быть к примеру и 2015г а sent_to_client уже 2016-ый, в итоге такая строка в выборку не попадет. Каким образом можно составить Where чтобы в него попадали все нужные записи?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SQL Count, group by date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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