Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите пожалуйста, может кто искал что-то похожее или... Есть таблица, в которой есть список адресов с id-ками адреса (id_address) и промежутками времени, когда этот адрес занят. id----id_address-------date_start--------date_stop 1 -------- 1 ----------- 01.12.2008 -------- 05.12.2008 2 -------- 1 ----------- 15.12.2008 -------- 25.12.2008 3 -------- 1 ----------- 15.01.2009 -------- 23.01.2009 4 -------- 2 ----------- 05.12.2008 -------- 10.12.2008 5 -------- 2 ----------- 11.12.2008 -------- 31.12.2008 6 -------- 3 ----------- 01.12.2008 -------- 18.12.2008 7 -------- 3 ----------- 25.12.2008 --------- 31.12.2008 Мне нужно находить список свободных адресов в определенный промежуток времени и больше определенного кол-ва свободных дней. Например найти все свободные с 01.12.2008 по 31.12.2009 и кол-во свободных дней больше 5 найдуться id_address - 1, 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 11:09 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
А почему в итоговую выборку не попала запись id----id_address-------date_start--------date_stop 5 -------- 2 ----------- 11.12.2008 -------- 31.12.2008 ??? Она же и в интервал попала и по длительности больше 5 дней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 11:47 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
А вообще, что-то такое должно быть: Код: plaintext 1. 2. 3. 4. :p_date_start - параметр, передающий дату начала интересующего интервала, :p_date_stop - параметр, передающий дату окончания интересующего интервала, :num_day - параметр, передающий кол-во свободных дней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 11:51 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх А почему в итоговую выборку не попала запись id----id_address-------date_start--------date_stop 5 -------- 2 ----------- 11.12.2008 -------- 31.12.2008 ??? Она же и в интервал попала и по длительности больше 5 дней... Она как раз таки не попадает, мне нужны свободные адреса а id_address = 2 занят с 5 по 31 и кол-во свободных дней у него 4(с 1 по 5). id----id_address-------date_start--------date_stop 4 -------- 2 ----------- 05.12.2008 -------- 10.12.2008 5 -------- 2 ----------- 11.12.2008 -------- 31.12.2008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:02 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Тьфу ты, не заметил, что данные в таблице представляют период занятости... :) Но тогда совсе непонятно условие задачи. Ведь если в таблице указан период занятости, то, стало быть, во всё остальное время адрес свободен. Тогда вообще все записи должны попасть в итоговую выборку... Вобщем, попробуй сформулировать условие задачи ещё раз, а то лично я уже совсем запутался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:08 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Мне нужно получить список id адресов которые не заняты с 01.12.2008 по 31.12.2008 и с кол-ом свободных дней больше 5. (я в первом посте не тот промежуток задал год 2008) Получается что id_address = 2 туда не попадает т.к. он занят с 5 по 31 4 -------- 2 ----------- 05.12.2008 -------- 10.12.2008 5 -------- 2 ----------- 11.12.2008 -------- 31.12.2008 а 1 и 3 попадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:25 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
NewLine Мне нужно находить список свободных адресов в определенный промежуток времени и больше определенного кол-ва свободных дней. Например найти все свободные с 01.12.2008 по 31.12.2009 и кол-во свободных дней больше 5 найдуться id_address - 1, 3.задача распадается на 2 1. если теоретически есть накладывающиеся записи по id_address - то "фсё плёхо" (т.е. считать можно, но сложно - надо сливать накладывающиеся диапазоны, и не сливать разрывы) 2. если гарантированно нет пересечений между интервалами занятости адреса, то просто считайте сумму SUM("date_start"::date - "date_stop"::date) ... GROUP BY id_address или точнее Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:33 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
assa1. если теоретически есть накладывающиеся записи по id_address - то "фсё плёхо" (т.е. считать можно, но сложно - надо сливать накладывающиеся диапазоны, и не сливать разрывы)На самом деле - весьма тривиальная задача ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:35 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
assa, да, педант из меня никакой поменяйте знак у Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:37 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхassa1. если теоретически есть накладывающиеся записи по id_address - то "фсё плёхо" (т.е. считать можно, но сложно - надо сливать накладывающиеся диапазоны, и не сливать разрывы)На самом деле - весьма тривиальная задача ;)возможно и есть простой и быстрый скл, но я предпочел бы сливать на 1 проходе в сортированном наборе (курсоре или FOR _rec IN SELECT ... ORDER BY .... LOOP). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 12:40 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуйста, а как найти непрерывный интервал между датами... По такому алгоритму Код: plaintext 1. 2. 3. Дни ищутся в разнобой, а нужно чтоб подряд... Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 11:14 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
NewLineСкажите пожалуйста, а как найти непрерывный интервал между датами... По такому алгоритму Код: plaintext 1. 2. 3. Дни ищутся в разнобой, а нужно чтоб подряд... Спасибо.скажите, что вы подразумеваете под интервалом между датами? (в постановке задачи у вас интервал (- "date_start" + "date_stop") задан в записи, и искать его не надо, т.ч. проартикулируйте всю задачу, или все ваши затруднения полностью; возможно - с самого начала). 2. "по такому алгоритму" интервалы не ищутся, а считается разница между параметрическим интервалом и суммой интервалов по данному ид-адреса. (Предложение WHERE на отбор я не приводил - оно набросано у э-эха, там же можно найти поправку на вываливания дат_старт и дат_стоп из диапазона выборки.) Результат сравнивается с параметром отсечки :p_num_day в предложении HAVING. Т.ч. понять вас становится затруднительно. 3. если у вас есть (вернее - допускаются) персечения между интервалами одного и того же адрес-ид, то решать надо иначе. О чем я сразу предупредил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 13:27 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
Под интервалом я понимаю например, есть две записи для одного адреса(id_address = 1) id----id_address-------date_start--------date_stop 1 -------- 1 ----------- 01.12.2008 -------- 13.12.2008 2 -------- 1 ----------- 15.12.2008 -------- 25.12.2008 У этих двух записей получиться разница 1 свободный день, тобишь 13 число) И если таких дней по 1 получиться 5 для одного id_ address, то этот адрес попадет в поиск, а не должен... Вот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 14:39 |
|
||
|
Алгоритм поиска в таблице с датами
|
|||
|---|---|---|---|
|
#18+
NewLineПод интервалом я понимаю например, есть две записи для одного адреса(id_address = 1) id----id_address-------date_start--------date_stop 1 -------- 1 ----------- 01.12.2008 -------- 13.12.2008 2 -------- 1 ----------- 15.12.2008 -------- 25.12.2008 У этих двух записей получиться разница 1 свободный день, тобишь 13 число) И если таких дней по 1 получиться 5 для одного id_ address, то этот адрес попадет в поиск, а не должен... Вот...вы никогда не пробовали формулировать свои мысли не для внутреннего употребления? читаем NewLineМне нужно находить список свободных адресов в определенный промежуток времени и больше определенного кол-ва свободных дней.тоже ничего ясного не сказано. не находите? итак, попробуем проинтуичить: вам нужны все ид_адресов, для которых, в заданном промежутке дат можно найти хотя бы один сплошной свободный интервал, не менее некоего заданного количества дней. Так? тогда я бы сделал ф-ю на plpgsql Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 16:34 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35684704&tid=2003827]: |
0ms |
get settings: |
9ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 395ms |

| 0 / 0 |
