powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select count (*) group by date
6 сообщений из 6, страница 1 из 1
Select count (*) group by date
    #39251009
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток форумчане!
Подскажите пожалуйста, возможно ли в одном запросе считать количество строк по многим датам?
Например имею такой набор данных:
Код: 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.
mysql> select no,crt_date,tobilling_date,sent_to_client,dop_prov from assistfin limit 20;
+--------+---------------------+---------------------+----------------+------------+
| no     | crt_date            | tobilling_date      | sent_to_client | dop_prov   |
+--------+---------------------+---------------------+----------------+------------+
|  50.01 | 2014-02-05 10:28:10 | 2014-02-05 14:42:35 | 2014-04-16     | 2014-09-23 |
| 123.01 | 2014-02-05 19:17:36 | 2014-03-17 18:58:05 | 2014-04-10     | 2014-06-30 |
|  51.01 | 2014-02-06 00:09:32 | 2014-03-20 16:53:46 | 2014-04-10     | 2014-06-30 |
| 124.01 | 2014-02-06 15:29:08 | 2014-03-20 17:04:42 | 2014-04-10     | 2014-06-30 |
| 230.01 | 2014-02-07 22:01:11 | 2014-03-20 16:41:03 | 2014-04-10     | 2014-06-30 |
| 252.01 | 2014-02-08 02:52:33 | 2014-03-20 16:43:03 | 2014-04-10     | 2014-06-30 |
| 123.02 | 2014-02-08 03:00:52 | 2014-03-17 18:58:10 | 2014-04-10     | 2014-06-30 |
| 213.01 | 2014-02-08 04:01:35 | 2014-03-26 19:03:01 | 2014-04-10     | 2014-09-19 |
|  55.01 | 2014-02-08 21:04:45 | 2014-03-07 18:40:46 | NULL           | 2014-06-26 |
| 126.01 | 2014-02-08 21:46:58 | 2014-09-02 18:39:36 | 2014-09-09     | 2014-09-26 |
| 284.01 | 2014-02-09 01:52:54 | 2014-06-11 19:11:06 | 2014-07-02     | 2014-07-21 |
| 261.01 | 2014-02-09 02:20:34 | 2014-03-17 20:57:39 | 2014-04-10     | 2014-06-30 |
| 318.01 | 2014-02-09 03:09:28 | 2014-03-17 20:44:25 | 2014-04-10     | 2014-06-30 |
| 225.01 | 2015-02-10 03:21:08 | 2014-03-20 16:57:56 | 2014-04-10     | 2014-06-30 |
| 248.01 | 2015-02-09 03:30:58 | 2014-03-18 18:02:21 | 2014-04-10     | 2014-06-30 |
| 178.01 | 2016-04-05 03:35:25 | 2014-03-21 17:10:12 | 2014-04-10     | 2014-06-30 |
| 184.01 | 2016-04-08 04:01:13 | 2014-03-20 16:38:02 | 2014-04-10     | 2014-06-30 |
| 320.01 | 2016-04-08 05:57:23 | 2014-03-17 20:49:19 | 2014-04-10     | 2014-06-30 |
| 230.02 | 2016-05-08 06:18:15 | 2014-03-20 16:41:08 | 2014-04-10     | 2014-06-30 |
| 325.01 | 2016-05-09 06:23:50 | 2014-03-17 20:42:04 | 2014-04-10     | 2014-06-30 |
+--------+---------------------+---------------------+----------------+------------+



На выходе нужна таблица вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
+---------+---------+--------+-----------+---------+
| year    | Created | Passed | To client | To prov |
+---------+---------+--------+-----------+---------+
| 2016-01 |    1901 |   1879 |      1873 |    1743 |
| 2016-02 |    2192 |   2169 |      2114 |    1912 |
| 2016-03 |    2693 |   2639 |      2539 |    2309 |
| 2016-04 |    2634 |   2574 |      2273 |    1976 |
| 2016-05 |    2593 |   2497 |      1109 |     949 |
| 2016-06 |     471 |    449 |         2 |      78 |
+---------+---------+--------+-----------+---------+
...
Рейтинг: 0 / 0
Select count (*) group by date
    #39251021
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть исчерпывающий список этих `year` - то LEFT JOIN 4 копий таблицы либо 4 поля с SUM(`year`=LEFT(field,7)). Если нет такого - то получить через UNION.
...
Рейтинг: 0 / 0
Select count (*) group by date
    #39251074
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Список year должен быть по месяцам за год (like '2016%' к примеру). Проблема в том, что не могу group by привязать к одному полю, например если сделать GROUP BY DATE_FORMAT(assistfin.crt_date, '%Y-%m'), то в таблицу не попадают строки где sent_to_client = 2016% а crt_date !=2016% в итоге получается неправильная статистика.
...
Рейтинг: 0 / 0
Select count (*) group by date
    #39251100
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
necoroСписок year должен быть по месяцам за годда мне похрен, кто, кому, что и за что должен! Список или есть, или его нет. Если есть - так и скажи. Если нет - получи.

necoroне могу group by привязать к одному полю
Можешь. Просто это поле должно быть не полем твоей таблицы данных, а полем того самого списка, о котором сказано на пару строк выше.
...
Рейтинг: 0 / 0
Select count (*) group by date
    #39251302
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подсказали на stackoverflow:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select Months.yearmonth, created, passed, to_client, to_prov

from
(SELECT date_format(datetime,'%Y-%m') as yearmonth
FROM (
    select (curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) MONTH) as datetime
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) AS t
where datetime > '2014' -- enter your earliest year here
ORDER BY datetime ASC) Months left join
(select date_format(crt_date,'%Y-%m') as yearmonth, count(no) as "created" from assistfin group by yearmonth) created on Months.yearmonth=created.yearmonth
left join
(select date_format(tobilling_date,'%Y-%m') as yearmonth, count(no) as "passed" from assistfin group by yearmonth) passed on Months.yearmonth=passed.yearmonth
left join
(select date_format(sent_to_client,'%Y-%m') as yearmonth, count(no) as "to_client" from assistfin group by yearmonth) to_client on Months.yearmonth=to_client.yearmonth
left join
(select date_format(dop_prov,'%Y-%m') as yearmonth, count(no) as "to_prov" from assistfin group by yearmonth) to_prov on Months.yearmonth=to_prov.yearmonth
where 
group by yearmonth;


Может кому пригодится.
P.S. осталось понять как это чудо работает ...
...
Рейтинг: 0 / 0
Select count (*) group by date
    #39251448
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
necoroосталось понять как это чудо работает
Да вот собсно подзапрос, который AS t, и генерит тебе список, о котором я упорно твердил... Правда, необходимость генерации его на 83 года мне кажется сомнительной...

И вторая метода - использование SUM по равенству - будет работать намного быстрее на больших массивах.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select count (*) group by date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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