|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
Добрый день, коллеги. Есть таблица продаж, упрощенно: user_id, datetime, volume. Нужно из нее выбрать суммы продаж по юзерам из списка (обычная строка с индексами юзеров через запятую) в трех разных диапазонах дат: date1_begin - date1_end, date2_begin - date2_end, date3_begin - date3_end. Эти диапазоны следуют друг за другом без разрывов. Т.е., предположим, по месяцам - январь, февраль, март. Последнего диапазона может не быть - т.е., выборка только за январь и февраль. Сейчас это делаю тремя запросами - по первому диапазону, по второму и, если задано, по третьему. Вероятно существует способ сделать это одним запросом? Подскажите, пожалуйста, как. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 18:05 |
|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
Передавать диапазоны как набор записей, и использовать в выражении группировки и условиях отбора. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 19:35 |
|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
Правильно ли я Вас понял, что следует использовать запрос типа: Код: sql 1. 2. 3. 4. 5.
У меня вначале была такая мысль, но я посчитал, что такой запрос будет отработан медленнее, чем два прямых: Код: sql 1. 2. 3. 4. 5.
Я ошибаюсь? Пока данных в базе мало и я не могу протестировать на скорость разные варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 21:04 |
|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
Я имел в виду Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2022, 21:57 |
|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
А, понятно. Благодаря Вашей наводке я объединил свои запросы в один через UNION ALL. Проверил на тестовой таблице - мой новый вариант и Ваш оказались практически одинаковы по скорости - разница на уровне статистической погрешности (меньше одного процента). А вот вариант, от которого я отказался, посчитав его медленным, действительно таковым и оказался - медленнее более чем на 25%! В общем, спасибо за совет! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 01:40 |
|
Один запрос на выборку данных из нескольких диапазонов
|
|||
---|---|---|---|
#18+
OlegROA , попробуйте в два запроса. Первым - создать темп-таблицу (engine=memory) с индексами (start,finish) и (finish,start), и слить в неё диапазоны, а во втором использовать её. При трёх записях, наверное, улучшения не будет, а вот если потребуется помесячно, скажем, за год - тут должен быть профит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 07:46 |
|
|
start [/forum/topic.php?fid=47&fpage=2&tid=1827812]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 156ms |
0 / 0 |