У меня есть запрос, который тянет из таблицы. С помощью этой таблицы я хотел бы создать запрос, который позволит мне делать прогнозы на будущее.
SELECT
b.date,
a.id,
SUM(CASE WHEN a.date = b.date THEN a.sales ELSE 0 END) sales,
SUM(CASE WHEN a.date = b.date THEN a.revenue ELSE 0 END) revenue
FROM
table_a a
CROSS JOIN table_b b
WHERE a.date BETWEEN '2018-10-31' AND '2018-11-04'
GROUP BY 1,2
table_b
- это таблица, в которой буквально только один столбец содержит даты, уходящие вглубь будущего. Это возвращает результаты как это:
+----------+--------+-------+---------+
| date | id | sales | revenue |
+----------+--------+-------+---------+
| 11/4/18 | 113972 | 0 | 0 |
| 11/4/18 | 111218 | 0 | 0 |
| 11/3/18 | 111218 | 0 | 0 |
| 11/3/18 | 113972 | 0 | 0 |
| 11/2/18 | 111218 | 0 | 0 |
| 11/2/18 | 113972 | 0 | 0 |
| 11/1/18 | 111218 | 89 | 2405.77 |
| 11/1/18 | 113972 | 265 | 3000.39 |
| 10/31/18 | 111218 | 64 | 2957.71 |
| 10/31/18 | 113972 | 120 | 5650.91 |
+----------+--------+-------+---------+
Теперь есть еще один вопрос после этого, когда я попадаю в прогнозы, а что нет, но для целей этого вопроса это все, что вам нужно, поскольку именно там существует CROSS JOIN
.
Как я могу восстановить эти результаты без использования CROSS JOIN
? На самом деле этот запрос имеет гораздо больший диапазон дат с большим количеством данных и требует много часов и много энергии для выполнения, и я знаю, что CROSS JOIN
следует избегать, если это возможно.