I have a query that pulls from a table. With this table, I would like to build a query that allows me to make projections into the future.
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 is a table with literally only one column that contains dates going deep into the future. This returns results like this:
+----------+--------+-------+---------+
|   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 |
+----------+--------+-------+---------+
Now there's more to the query after this where I get into the projections and what not, but for the purposes of this question, this is all you need, as it's where the CROSS JOIN exists.
How can I recreate these results without using a CROSS JOIN? In reality, this query is a much larger date range with way more data and takes hours and so much power to run and I know CROSS JOIN's should be avoided if possible.
