Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выбрать актуальные значения из множества периодов.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Возможно опытные разработчики встречались с такой задачей и могут подсказать решение задачи. Есть таблица в которой заданы значение параметра(тариф) с рамками его актуальности: Company | Value | PeriodFrom | ReriodTo | LastUpdateTime В поле LastUpdateTime хранится дата последнего обновления строки. Периоды могут пересекаться всевозможными способами, могут быть "дырки" с отсутствующими значениями для Val. Значения Val почасовые. Необходимо выбрать все самые актуальные(с максимально LastUpdateTime) Val для всех часов в имеющихся периодах. Если значение в смежных периодах не меняется, то периоды необходимо объединить(необязательно). Пока в голову пришло только такое решение: сделать таблицу с почасовыми датами с наименьшей, имеющейся в исходной таблице, до максимальной. Далее такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Для одной компании работает около 30 секунд. Проблема, что в таблице порядка 30000 компаний, запрос просто отваливается( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 09:05 |
|
||
|
Выбрать актуальные значения из множества периодов.
|
|||
|---|---|---|---|
|
#18+
Roman7inНеобходимо выбрать все самые актуальные(с максимально LastUpdateTime) Val для всех часов в имеющихся периодах.Можно написать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А по скорости - нужно смотреть план запроса, индексы у таблиц. И это, алиасы проставляйте везде, а не у некоторых таблиц и полей, читать будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 09:51 |
|
||
|
Выбрать актуальные значения из множества периодов.
|
|||
|---|---|---|---|
|
#18+
>> Если значение в смежных периодах не меняется, то периоды необходимо объединить(необязательно). видел про упаковку периодов, это такая себе тема https://www.osp.ru/winitpro/2015/10/13047177/ https://www.osp.ru/winitpro/2014/02/13039447/ курить и курить, если надо по самой задаче можно смотреть еще на оконки FIRST_VALUE/LAST_VALUE если критична скорость, то имеет смысл или индекс построить соответствующий очень быстро шуршат оконки в таблицах columstore, прям вот отдельно хотел тему запилить) 10м с какими-то жуткими вязками самой на себя - миллисекунды на бытовом i7 с 17ым сервером когда первая версия запроса работает 10 минут - это прям замечательно видеть после допиливания) с не-columstore таблицами можно выкружить batch mode, подвязав фиктивным left join on 1=0 хоть пустую columstore-таблицу http://sqlcom.ru/optimization_query/batch-mode-and-hacks-for-rowstore-queries-in-sql-server/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 10:09 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1687950]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 330ms |

| 0 / 0 |
