|
определение ближайшей даты события по дате начала и интервалу
|
|||
---|---|---|---|
#18+
Добрый день всем. Столкнулся с такой задачей. Есть дата начала события в таблице и некий интервал срабатывания. Необходимо определить ближайшую дату, когда это событие должно выполнится, относительно текущей даты. Решается вроде через generate_series, SELECT gs.code, max(gs.ls) AS ndate FROM (SELECT c.*, (generate_series(c.startdate, now()+intrvl, intrvl)) FROM...) но при старой дате начала и коротком интервале генерируется очень много записей, что приводит к замедлению выполнения запроса. Другой вариант SELECT c.code, (startdate + (trunc(EXTRACT (epoch FROM (now() - c.startdate)) / EXTRACT(epoch FROM intrvl))::int + 1) * intrvl) AS ndate ... с делением разности текущей даты и даты начала на длину интервала и последующее вычисление количества интервалов не работает для таких интервалов как месяц и год, из-за того что их длина переменная, в зависимости от того какой именно это месяц/год. Может есть еще какие-то варианты решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2019, 08:55 |
|
определение ближайшей даты события по дате начала и интервалу
|
|||
---|---|---|---|
#18+
Duke_kz Может есть еще какие-то варианты решения? материализовать дату последнего срабатывания? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2019, 10:15 |
|
определение ближайшей даты события по дате начала и интервалу
|
|||
---|---|---|---|
#18+
Duke_kz, можно как-то так пощупать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2019, 16:02 |
|
|
start [/forum/search_topic.php?author=Marazmic&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 438ms |
total: | 595ms |
0 / 0 |