SQL 每日未结销售额,滚动汇总?
SQL Daily Outstanding Sales, Rolling Aggregate?
使用下面的测试数据,我试图显示有多少销售没有被同事采取行动,未完成的销售是任何仍然显示为 "New" 的记录,我一直在使用下面的识别那些。
select saleID, count(*) group by saleID having count(*)=1
我遇到的问题是我发现很容易显示总体有多少迄今为止仍然未完成,但我不能弄清楚如何显示 3 天前有多少人表现出色。这个想法是,这将在每天绘制图表时显示趋势,突出显示每天结束时是否有 increase/decrease 的未完成销售。理想情况下,输出将沿着下面的行
Date VolumeOutstanding
2020-01-01 0
2020-01-02 1
2020-01-03 3
2020-01-04 2
数据集
SaleID Date Outcome
1 2020-01-01 New
1 2020-01-01 Complete
2 2020-01-01 New
2 2020-01-02 Complete
3 2020-01-03 New
4 2020-01-03 New
5 2020-01-03 New
5 2020-01-04 Complete
您可以使用条件聚合和累计总和:
select date,
sum(sum(case when outcome = 'New' then 1
when outcome 'Complete' then -1
else 0
end)
) over (order by date) as VolumeOutstanding
from t
group by date
order by date;
这假设每个 saleId
最多有一个 "new" 和一个 "complete" 记录 -- 这在您的样本数据中是有意义的并且是真实的。
使用下面的测试数据,我试图显示有多少销售没有被同事采取行动,未完成的销售是任何仍然显示为 "New" 的记录,我一直在使用下面的识别那些。
select saleID, count(*) group by saleID having count(*)=1
我遇到的问题是我发现很容易显示总体有多少迄今为止仍然未完成,但我不能弄清楚如何显示 3 天前有多少人表现出色。这个想法是,这将在每天绘制图表时显示趋势,突出显示每天结束时是否有 increase/decrease 的未完成销售。理想情况下,输出将沿着下面的行
Date VolumeOutstanding
2020-01-01 0
2020-01-02 1
2020-01-03 3
2020-01-04 2
数据集
SaleID Date Outcome
1 2020-01-01 New
1 2020-01-01 Complete
2 2020-01-01 New
2 2020-01-02 Complete
3 2020-01-03 New
4 2020-01-03 New
5 2020-01-03 New
5 2020-01-04 Complete
您可以使用条件聚合和累计总和:
select date,
sum(sum(case when outcome = 'New' then 1
when outcome 'Complete' then -1
else 0
end)
) over (order by date) as VolumeOutstanding
from t
group by date
order by date;
这假设每个 saleId
最多有一个 "new" 和一个 "complete" 记录 -- 这在您的样本数据中是有意义的并且是真实的。