Я пытаюсь создать запрос SQL, который условно извлекает данные из нескольких таблиц.
У меня есть четыре таблицы:
orders
+------+------------+------------+
| id | date_added | currency |
+------+------------+------------+
| 1 | 2018-07-23 | 1 |
+------+------------+------------+
order_items
+------+------------+------------+---------------+---------------+
| id | order_id | price | product_id | product_type |
+------+------------+------------+---------------+---------------+
| 1 | 1 | 100.00 | 1 | ticket |
+------+------------+------------+---------------+---------------+
order_data
+------+--------------+---------------+
| id | order_id | ext_order_ref |
+------+--------------+---------------+
| 1 | 1 | ABC |
+------+--------------+---------------+
products
+------+------------+------------+
| id | date | product_id |
+------+------------+------------+
| 1 | 2020-03-12 | 1 |
+------+------------+------------+
| 2 | 2020-03-18 | 2 |
+------+------------+------------+
| 3 | 2020-03-20 | 3 |
+------+------------+------------+
Мне нужно вывести заказы со следующими условиями:
- Каждый заказ в строка с итогом (вычисляется из позиций заказа с соответствующим идентификатором заказа)
- 'ext_order_ref' из таблицы order_data, которая соответствует этому заказу
- Включать только те позиции заказа, которые имеют указанный c продукт тип
- Включать только заказы с продуктами из определенного диапазона дат
Предпочитаемый результат будет выглядеть следующим образом:
+------------+------------+--------------+
| order_id | total | ext_order_ref|
+------------+------------+--------------+
| 1 | 100 | ABC |
+------------+------------+--------------+
Мой текущий запрос в основном такой; Посоветуйте пожалуйста
SELECT
orders.id as order_id,
SUM(order_items.price) as total,
order_data.ext_order_ref
FROM orders
INNER JOIN order_data
ON orders.id = order_data.ext_order_ref
RIGHT JOIN order_items
ON orders.id = order_items.order_id
LEFT JOIN products
ON order_items.product_id = products.product_id
WHERE order_items.product_type = 'ticket' AND products.date BETWEEN '2020-03-12' AND '2020-03-18'
GROUP BY orders.id
Почти работает, но не совсем. Дата особенно вызывает проблемы.
Заранее спасибо!