我需要一个脚本来获取每周比较数据的百分比差异。我已经有了一个可以在除实际周之外的所有周内正常运行的脚本。 我遇到的问题是,对于本周,我只想比较已完成的日期,例如,如果今天是星期三,我想将本周的星期一+星期二与上周的星期一+星期二进行比较。我的脚本正在将本周的周一+周二与上周整周进行比较。
这是我需要的输出:
周数 | 年份 | %订单差异 | %NC 差异 |
---|---|---|---|
20 | 2024 | 30.47% | 30.56% |
19 | 2024 | 29.96% | 32.20% |
18 | 2024 | 32.08% | 31.29% |
这是我的实际脚本:
WITH CTE AS (
SELECT
week(purchased_est,1) as weeknum,
year(purchased_est) as yearsales,
count(*) as TotalOrders ,
IFNULL(SUM(net_comp),0) as NCTotal
FROM revenue
WHERE purchased_est < @today
GROUP by week(purchased_est,1), YEAR(purchased_est)
order by YEAR(purchased_est) desc, week(purchased_est,1) desc
)
SELECT
CTE.weeknum,
CTE.yearsales,
CONCAT(ROUND((CTE.TotalOrders - LEAD(CTE.TotalOrders) OVER (ORDER BY CTE.yearsales desc, CTE.weeknum desc))/ LEAD(CTE.TotalOrders) OVER (ORDER BY CTE.yearsales desc, CTE.weeknum desc) *100,2),'%') as 'Orders difference',
CONCAT(ROUND((CTE.NCTotal - LEAD(CTE.NCTotal) OVER (ORDER BY CTE.yearsales desc, CTE.weeknum desc))/ LEAD(CTE.NCTotal) OVER (ORDER BY CTE.yearsales desc, CTE.weeknum desc) *100,2),'%') as 'NC difference'
FROM CTE
此脚本无法正确计算本周的数学,它正在比较本周完成的天数(今天之前的天数)与上周的整个情况。
请帮助我!
使用
LAG
查看上一行。这可以在没有任何 WITH
或子查询的情况下完成,但为了更容易理解,这里分为三个步骤:聚合、LAG 查看前一周、最终计算。
WITH
aggregated AS
(
SELECT
YEAR(purchased_est) AS year_sales,
WEEK(purchased_est, 1) AS week_number,
COUNT(*) AS total_orders,
COALESCE(SUM(net_comp), 0) AS total_nc
FROM revenue
WHERE purchased_est < @today
GROUP by YEAR(purchased_est), WEEK(purchased_est, 1)
),
with_previous AS
(
SELECT
year_sales,
week_number,
total_orders,
total_nc,
LAG(total_orders) OVER (ORDER BY year_sales, week_number) AS prev_orders,
LAG(total_nc) OVER (ORDER BY year_sales, week_number) AS prev_nc
FROM aggregated
)
SELECT
year_sales,
week_number,
orders_total,
nc_total,
CASE WHEN prev_orders > 0 THEN (1 - (total_orders / prev_orders)) * 100 END AS orders_diff_percent,
CASE WHEN prev_nc > 0 THEN (1 - (total_nc / prev_nc)) * 100 END AS nc_diff_percent
FROM with_previous
ORDER BY year_sales, week_number;