簡體   English   中英

在 SQL 中動態聚合基於日期的列

[英]Aggregating a column based on date dynamically in SQL

這更像是一個概念問題。 我試圖將今年的銷售額與去年的銷售額進行比較。 但是比較應該是動態的,例如,今年我考慮到昨天發生的銷售額,我還需要考慮上一年到去年同一天的銷售額。

例如,今天是 12 月 24 日,所以對於 2021 年,我將銷售額匯總到 12 月 23 日,我也需要在 2020 年也這樣做,即到 2020 年 12 月 23 日。對於明天的報告,匯總應該到 2021 年 12 月 24 日分別為 2020 年 12 月 24 日和 2020 年 12 月 24 日。

到目前為止我的代碼:

SELECT product_category,
       SUM(CASE WHEN purchase_date >= '2021-01-01' AND purchase_date < CURRENT_DATE THEN sales_revenue ELSE 0 END) AS revenue_2021,
       SUM(CASE WHEN purchase_date >= '2020-01-01' AND purchase_date < '2021-01-01' THEN sales_revenue ELSE 0 END) AS revenue_2020
FROM sales_table
GROUP BY 1
ORDER BY 1
       

在這里,2021 年,我的代碼有效。 但對於 2020 年,它將給出全年(2020 年)的總和。 無論如何,我是否可以像 2021 年一樣讓 2020 年充滿活力?

SELECT product_category,
       SUM(CASE WHEN purchase_date >= DATEADD(yy, DATEDIFF(yy, 0, CURRENT_DATE), 0)

 AND purchase_date < CURRENT_DATE THEN sales_revenue ELSE 0 END) AS revenue_2021,
       SUM(CASE WHEN purchase_date >= DATEADD(yy, DATEDIFF(yy, 0, CURRENT_DATE)-1, 0) AND purchase_date < dateadd(yy, -1, CURRENT_DATE) THEN sales_revenue ELSE 0 END) AS revenue_2020
FROM sales_table
WHERE
purchase_date >= DATEADD(yy, DATEDIFF(yy, 0, CURRENT_DATE)-1, 0)
GROUP BY 1
ORDER BY 1
      

我自己解決了這個問題,這似乎有效。

SELECT EXTRACT(YEAR FROM DATE_TRUNC('YEAR',purchase_date) AS Year,
product_category,
SUM(sales_revenue)
FROM sales_table
WHERE DATE_PART('MONTH',purchase_date)*100 + DATE_PART('DAY',purchase_date_time)
< DATE_PART('MONTH',CURRENT_DATE)*100 + DATE_PART('DAY',CURRENT_DATE)
GROUP BY 1,2
ORDER BY 1,2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM