powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с разбивкой на дни
17 сообщений из 17, страница 1 из 1
Запрос с разбивкой на дни
    #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
Запрос с разбивкой на дни
    #39892525
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да запросто...

Версию сервера укажите.
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892527
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
5.7
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892531
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда другой вопрос - есть ли некое число такое, что разность дат в одной записи в днях гарантированно меньше.
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892533
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нету
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #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
Запрос с разбивкой на дни
    #39892536
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwe88
нету
Ну тогда заложись... ну скажем, 1000 - это почти три года... или 10000 - вот уж точно хватит.
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892543
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое. Вот только про генератор чисел не очень понял
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892556
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, понял.
А можно как-то num сделать самогенерирующемся?
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892573
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwe88
можно как-то num сделать самогенерирующемся?
Да запросто. Просто обнови версию сервера до восьмой...
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892698
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версию поменять нельзя.
Есть идея сделать генератор через цикл в хранимой процедуре. А как-нибудь проще можно?
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892728
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwe88
как-нибудь проще можно?
Один раз сгенерить такую таблицу интов (скажем, от 0 до 999), положить её в БД MySQL, и использовать сколько нужно раз.
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892730
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Под "БД MySQL" - имелась в виду служебная база (use mysql), а не DBMS.
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892763
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, спасибо большое за наводку. А то уже голову сломал)
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #39892805
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, все-таки не могли бы помочь с этими процедурами (решил через них пойти).
Правильно ли я понял, что тут процедура не подойдет, а скорее функция нужна с return селектов?
Вот не понял, как это реализовать. Пока только строчку или int, а как таблицу вывести не понял
...
Рейтинг: 0 / 0
Запрос с разбивкой на дни
    #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
Запрос с разбивкой на дни
    #39893008
qwe88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работает. Спасибо большое!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с разбивкой на дни
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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