I have a use case where I want to calculate the number of dates which had stocks in and out. My tbl schema has just 4 cols : stock_type, in_date, out_date, serial_no.
stck_typ | in_date | out_date | serial_no |
---|---|---|---|
S1 | 2022-11-10 | 2022-11-18 | 103 |
S3 | 2022-11-13 | 2022-11-25 | 104 |
S2 | 2022-12-01 | 2022-12-07 | 102 |
tbl structure: enter image description here
Is there a way to get the output like below tbl:
date | in_count | out_count | stock_type |
---|---|---|---|
2022-11-10 | 3 | 0 | S1 |
2022-12-01 | 6 | 0 | S2 |
2022-12-01 | 6 | 0 | S1 |
2022-12-01 | 6 | 0 | S3 |
2022-12-05 | 0 | 8 | S1 |
2022-12-05 | 0 | 8 | S2 |
Any help will be appreciated.
I tried the below query on heidisql : For IN_DATE:
SELECT in_date, stock_type, COUNT(in_date) AS IN_COUNT FROM records GROUP BY IN_DATE having in_date>='2022-11-10' AND in_date<='2022-12-08'
For OUT_DATE:
SELECT out_date, stock_type, COUNT(OUT_date) AS OUT_COUNT FROM records GROUP BY OUT_DATE having out_date>='2022-11-10' AND out_date<='2022-12-08'
or something like this on bigquery:
SELECT in_date,
a.stock_type,
count(in_date) OVER(PARTITION BY in_date)
FROM table
SELECT in_date,
a.stock_type,
count(in_date) OVER(PARTITION BY in_date)
FROM table
the output looks correct but I want the output in a single query but grouping by on both in_date and out_date is not giving the desired result.
You might consider another option not using UNION as well,
SELECT date, stock_type, COUNTIF(offset = 0) in_count, COUNTIF(offset = 1) out_count
FROM records, UNNEST([in_date, out_date]) date WITH offset
WHERE date BETWEEN '2022-11-10' AND '2022-12-08'
GROUP BY 1, 2 ORDER BY 1, 2;
Query results