Не вдаваясь в подробности, я думаю, что все, что вам нужно, - это столбец, чтобы помочь с заказом
with (....
...
)
Select --summary row
0 as ordr,
c.purchase_date,
"Day Total" AS Hour,
if(c.QtyCount is null, 0, c.QtyCount) QtyCount,
if(c.QtyTotal is null, 0, c.QtyTotal) QtyTotal,
if(c.Price is null, 0, c.Price) AS Price
FROM a LEFT JOIN c
ON a.datet = c.purchase_date
UNION
Select
1 as ordr,
a.datet AS Date,
a.hourt AS Hour,
if(c.QtyCount is null, 0, c.QtyCount) QtyCount,
if(c.QtyTotal is null, 0, c.QtyTotal) QtyTotal,
if(c.Price is null, 0, c.Price) AS Price
FROM a LEFT JOIN b
ON a.datet = b.purchase_date AND a.hourt = b.Hour
ORDER BY Date, ordr, hour
Я предлагаю вам изучить ROLLUP , что может упростить ваш запрос.
Чтобы получить сводку по каждой дате, вам нужно использовать cte «a» в качестве базовой таблицы, слева присоединиться к sales_table, см. «C» ниже. Это непроверенный и только предложение, вам нужно будет сделать любое отладки.
with a as (
SELECT
DATE_FORMAT(DateT, "yyyy-MM-dd") AS datet,
CAST(hourt AS INTEGER) AS hourt,
QtyCount,
QtyTotal,
Price
FROM date_hour
)
, b as (
SELECT
a.purchase_date,
CAST(DATE_PART("HOUR", CAST(a.purchase_date AS DATETIME)) as INTEGER) AS
Hour,
COUNT(a.quantity) AS QtyCount,
SUM(a.quantity) AS QtyTotal,
SUM((a.item_price) AS Price
FROM sales_table a
GROUP BY Hour, a.purchase_date
)
, c as (
SELECT
a.datet as purchase_date,
CAST(DATE_PART("HOUR", CAST(st.purchase_date AS DATETIME)) as INTEGER) AS Hour,
COUNT(st.quantity) AS QtyCount,
SUM(st.quantity) AS QtyTotal,
SUM((st.item_price) AS Price
FROM a
left join sales_table st ON a.datet = c.purchase_date
GROUP BY a.datet
) --summary row subquery
btw"a" "b" "c" и т. Д. Очень разочаровывающие псевдонимы. Я думаю, что вещи типа "st" (Sales Table) более полезны.