Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с разбивкой на дни / 17 сообщений из 17, страница 1 из 1
21.11.2019, 18:00
    #39892507
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Всем привет!
Застрял над одной задачей, помогите пожалуйста.

Есть таблица
ID || date_plan || date fact
123 || 19.11.2019 || 21.11.2019
124 || 14.11.2019 || 20.11.2019
125 || 17.11.2019 || 20.11.2019

Как в одном запросе сделать так, что бы вывод был такой:
123 || 19.11.2019 || 21.11.2019 || 19.11.2019
123 || 19.11.2019 || 21.11.2019 || 20.11.2019
123 || 19.11.2019 || 21.11.2019 || 21.11.2019
124 || 14.11.2019 || 20.11.2019 || 14.11.2019
124 || 14.11.2019 || 20.11.2019 || 15.11.2019
124 || 14.11.2019 || 20.11.2019 || 16.11.2019
124 || 14.11.2019 || 20.11.2019 || 17.11.2019
124 || 14.11.2019 || 20.11.2019 || 18.11.2019
124 || 14.11.2019 || 20.11.2019 || 19.11.2019
124 || 14.11.2019 || 20.11.2019 || 20.11.2019
125 || 17.11.2019 || 20.11.2019 || 17.11.2019
125 || 17.11.2019 || 20.11.2019 || 18.11.2019
125 || 17.11.2019 || 20.11.2019 || 19.11.2019
125 || 17.11.2019 || 20.11.2019 || 20.11.2019

Т.е. вычет разницы дней, и дублирование для каждой строки новый день.
Без языка программирования, только один sql запрос.
Реально ли так сделать?
...
Рейтинг: 0 / 0
21.11.2019, 18:29
    #39892525
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Да запросто...

Версию сервера укажите.
...
Рейтинг: 0 / 0
21.11.2019, 18:30
    #39892527
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
5.7
...
Рейтинг: 0 / 0
21.11.2019, 18:36
    #39892531
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Тогда другой вопрос - есть ли некое число такое, что разность дат в одной записи в днях гарантированно меньше.
...
Рейтинг: 0 / 0
21.11.2019, 18:39
    #39892533
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
нету
...
Рейтинг: 0 / 0
21.11.2019, 18:42
    #39892535
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
А в общем случае это будет
Код: sql
1.
2.
3.
SELECT t1.*, t1.date_plan + INTERVAL t2.num DAY 
FROM source_table t1, (генератор чисел от нуля до N) t2
WHERE t2.num <= DATEDIFF(t1.date_fact, t1.date_plan)



где генератор может выглядеть как, например
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 0 num UNION ALL 
SELECT 1 UNION ALL
SELECT 2 UNION ALL
...
SELECT N-1 UNION ALL
SELECT N


или как картезианка двух-трёх таких таблиц и соотв. выражение вычисления очередного числа, типа

Код: sql
1.
(t11 + t12*N + t13*N*N ...) AS num
...
Рейтинг: 0 / 0
21.11.2019, 18:43
    #39892536
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
qwe88
нету
Ну тогда заложись... ну скажем, 1000 - это почти три года... или 10000 - вот уж точно хватит.
...
Рейтинг: 0 / 0
21.11.2019, 19:02
    #39892543
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Спасибо большое. Вот только про генератор чисел не очень понял
...
Рейтинг: 0 / 0
21.11.2019, 19:23
    #39892556
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
А, понял.
А можно как-то num сделать самогенерирующемся?
...
Рейтинг: 0 / 0
21.11.2019, 20:17
    #39892573
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
qwe88
можно как-то num сделать самогенерирующемся?
Да запросто. Просто обнови версию сервера до восьмой...
...
Рейтинг: 0 / 0
22.11.2019, 10:06
    #39892698
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Версию поменять нельзя.
Есть идея сделать генератор через цикл в хранимой процедуре. А как-нибудь проще можно?
...
Рейтинг: 0 / 0
22.11.2019, 10:43
    #39892728
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
qwe88
как-нибудь проще можно?
Один раз сгенерить такую таблицу интов (скажем, от 0 до 999), положить её в БД MySQL, и использовать сколько нужно раз.
...
Рейтинг: 0 / 0
22.11.2019, 10:44
    #39892730
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
PS. Под "БД MySQL" - имелась в виду служебная база (use mysql), а не DBMS.
...
Рейтинг: 0 / 0
22.11.2019, 11:46
    #39892763
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Ага, спасибо большое за наводку. А то уже голову сломал)
...
Рейтинг: 0 / 0
22.11.2019, 12:41
    #39892805
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Ох, все-таки не могли бы помочь с этими процедурами (решил через них пойти).
Правильно ли я понял, что тут процедура не подойдет, а скорее функция нужна с return селектов?
Вот не понял, как это реализовать. Пока только строчку или int, а как таблицу вывести не понял
...
Рейтинг: 0 / 0
22.11.2019, 14:30
    #39892937
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SELECT t0.id, 
       t0.date_plan,
       t0.date_fact,
       t0.date_plan + INTERVAL t1.num + 10 * t2.num + 100 * t3.num DAY each_day
FROM source_table t0, 
     ( SELECT 0 num 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 ) t1,
     ( SELECT 0 num 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 ) t2,
     ( SELECT 0 num 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 ) t3    
HAVING each_day <= date_fact
...
Рейтинг: 0 / 0
22.11.2019, 15:37
    #39893008
qwe88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с разбивкой на дни
Работает. Спасибо большое!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с разбивкой на дни / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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