|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
Обращаюсь за помощью с формированием SQL запроса. Суть следующая: Есть 2 таблицы Таблица 1 - Задачи: Data - дата создания задачи, Org - id организации, idT - id задачи(уникальное) Org1, Data, IdT1 Org1, Data, IdT2 Org1, Data, IdT3 Org1, Data, IdT4 Org2, Data, idT5 Таблица 2 – Сделки: Data - дата создания сделки, Org - id организации, idD- id сделки(уникальное), Status - статус Org1, Data, Status1, idD1 Org1, Data, Status2, idD2 Org2, Data, Status1, idD3 Для каждой организации выбрать задачи и сделки, при этом разница между датой создания задачи и сделки не более 5 дней. К одной задаче могут подходить от 0 до нескольких сделок, но сделка не может подходить к нескольким задачам. Разница между датой задачи и сделки должна быть минимальна, но сделка всегда позже задачи. На выходе что-то похожее на: Org1, Data, IdT1, idD1, Data Org1, Data, IdT1, null, null Org1, Data, IdT2, null, null Org1, Data, IdT3, null, null Org1, Data, IdT4, idD2, Data Org2, Data, idT5, null, null Перебрала разные варианты, но выйти на корректное решение так и не удалось. Скорее всего иду не по тому пути. Наиболее близким был запрос, но он не отражает несколько записей для одной задачи, а берет только минимум: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 13:36 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
llama3, если сделки не связаны с задачами, то есть совершаются без ссылки на задачу, то вы можете только предположительно связывать сделку и задачу, а это недопустимо. Вам надо реорганизовать процесс обработки сделок, связать с задачами. Иначе пересечения множеств сделок и задач будут догадкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 14:25 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
llama3, Следует использовать такую конструкцию Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 15:19 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
Чему в школах учат? Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 16:05 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
Владислав Колосов, согласна, результат может быть некорректным из-за неверной структуры, но задание было именно таким.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 14:23 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
aleks222, запрос не выдаст верные результаты. это будет минимальная дата, а тут закладывается логика, что их может быть несколько в разные дни для одной задачи. Сделала в итоге так, думаю, что тоже неоптимально, но результат вроде как выдается корректный. Пошла по такой логике: 1. Выбираем сделки, которые были совершены на следующий день после даты задания 2. Выбираем сделки, которые были совершены спустя 2 дня после внесения задания, при этом из выборки сделок исключаем те, которые уже учтены в п.1 3. Проделываем операции, аналогичные п.2 для данных до того момента, пока разница между датами не превышает 5 дней 4. Объединяем результаты, полученные в п.1-3 и данные из таблицы по заданиям, сделки для которых не были найдены select задачи.Org, задачи.data, задачи.idT, d.IDd, d.data_сделки from задачи left join (SELECT задачи.*, Сделки.IDd, Сделки.data as data_сделки FROM задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=1 union SELECT задачи.*, Сделки.IDd, Сделки.data as data_сделки FROM задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=2 and Сделки.IDd not in (select сделки.IDd from задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=1) union SELECT задачи.*, Сделки.IDd, Сделки.data as data_сделки FROM задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=3 and Сделки.IDd not in (select сделки.IDd from задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data between 0 and 3) union SELECT задачи.*, Сделки.IDd, Сделки.data as data_сделки FROM задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=4 and Сделки.IDd not in (select сделки.IDd from задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data between 0 and 4) union SELECT задачи.*, Сделки.IDd, Сделки.data as data_сделки FROM задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data=5 and Сделки.IDd not in (select сделки.IDd from задачи INNER JOIN Сделки ON задачи.Org = Сделки.Org where Сделки.data- задачи.data between 0 and 5) ) as d on задачи.idt=d.idt and задачи.data=d.data ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 14:25 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
llama3 aleks222, запрос не выдаст верные результаты. это будет минимальная дата, а тут закладывается логика, что их может быть несколько в разные дни для одной задачи. Учитесь внятно формулировать. И будет вам щастье. Осподе, какой ужос то.... И из-за этого вы нам тут выносили мозг? Код: sql 1. 2.
зря вы пошли программировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 14:38 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
aleks222, Формулировка не моя. Я учусь программировать, вроде форум тут, в том числе, и для этих целей. Ваш запрос не выдает даты с минимальным интервалом, он покажет результаты с заданным диапазоном дат, а надо вывести результат, где одна сделка соответствует одной задаче и одной сделке может соответствовать несколько задач, при этом разница между датами минимальна (+ менее 5 дней) и дата сделки позже даты задачи. Если бы все было так просто, я бы не спрашивала. Для наглядности прикладываю скрин. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 09:26 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
llama3, а почему у Вас сделка 147 привязана и к 464 и 456 заданию, а сделка 146 только к 464 и не привязана к 455 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 10:31 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
HandKot llama3, а почему у Вас сделка 147 привязана и к 464 и 456 заданию, а сделка 146 только к 464 и не привязана к 455 Вопрос в пустоту. Тредстартерша не в состоянии ни осмыслить, ни сформулировать желаемое. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 19:37 |
|
SQL запрос к таблицам многие-ко-многим с ограничениями
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 19:52 |
|
|
start [/forum/topic.php?fid=46&msg=40099518&tid=1684266]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 144ms |
0 / 0 |