Я изо всех сил пытаюсь найти способ эффективно объединить два набора данных с помощью одного запроса
Первый набор данных может быть возвращен с помощью следующего запроса:
SELECT hours_person_id, hours_date, hours_job, SUM(hours_value) AS hours
FROM hours
WHERE hours_status = 1
GROUP BY hours_person_id, hours_date, hours_job
, который дает набор данных, аналогичный
| 1 | 2020-06-07 | 101 | 25 |
| 1 | 2020-06-07 | 102 | 10 |
| 1 | 2020-06-07 | 103 | 5 |
| 2 | 2020-06-07 | 101 | 30 |
| 2 | 2020-06-07 | 104 | 10 |
Из которого мы можем получить общее количество часов в неделю для каждой работы и т. Д. c ...
Наш второй набор данных дает нам почасовые ставки для каждого человека. Проблема в том, что эта таблица содержит как исторические , так и будущие почасовые ставки, поэтому объединение должно гарантировать, что ставка применяется к правильным person_id и дата . Также может быть более одной ставки для человека на свидании.
Ниже приведены все активные ставки
SELECT rate_person_id, rate_date, rate_value
FROM rates
WHERE rate_active = 1
Что может выглядеть как
| 1 | 2020-01-01 | 20.00 |
| 1 | 2020-05-01 | 25.00 |
| 1 | 2020-07-01 | 22.00 |
| 2 | 2020-01-01 | 22.00 |
| 2 | 2020-05-01 | 24.00 |
| 3 | 2020-05-01 | 20.00 |
| 3 | 2020-05-01 | 21.00 |
| 3 | 2020-07-01 | 18.00 |
Таким образом, для часов выше скорости из 2020-05-01
будет ожидаемый результат, а значение 21.00
будет результатом для person_id === 3
Может ли то, что я ищу для выполнения в одном запросе, или мне лучше объединить два подзапроса?
Обновление По запросу здесь скрипт, который представляет собой https://www.db-fiddle.com/f/oiUpTnajY6M6ZTfZgRf4kT/0 Как вы можете видеть, что у нас есть запрос, который возвращает правильные данные, но этот запрос не масштабируется до нашего текущего набора данных (1,8 млн строк и более подтаблиц)