![](/img/trans.png)
[英]How can I use the LAG FUNCTION to show revenue this year vs last year in Snowflake with?
[英]LAG function alternative. I need the results for the missing year in between
到目前為止,我有這張桌子。 但是,我想獲得 2019 年沒有記錄的結果,所以它變為 0。是否有任何替代 LAG 功能的方法。
ID | 年 | Year_Count |
---|---|---|
1 | 2018 | 10 |
1 | 2020 | 20 |
每當我在 SQL 中使用 LAG function 時,它都會給我 2018 年的結果。但是,我想得到 2019 年的 0 和 2018 年的 10
LAG(YEAR_COUNT) OVER (PARTITION BY ID ORDER BY YEAR) AS previous_year_count
未經測試的記事本塗鴉
CASE
WHEN 1 = YEAR - LAG(YEAR) OVER (PARTITION BY ID ORDER BY YEAR)
THEN LAG(YEAR_COUNT) OVER (PARTITION BY ID ORDER BY YEAR)
ELSE 0
END AS previous_year_count
我將在這里舉一個例子來補充尼克的評論。
這里的 YEARS CTE 正在按照他的建議創建那個年份表,RECORDS 表與上面發布的相匹配。 然后他們與 COALESCE 一起填寫 LEFT JOIN 留下的 null 值(用 0 填充 ID,不確定您的情況是什么)。
您需要 LEFT JOIN 到 YEAR 表和 select 在最終查詢中 YEAR 表中的 YEAR 變量,否則您最終只會得到 2018/2020 或那些年份和一些 null 值
WITH
YEARS AS
(
SELECT 2016 AS YEAR UNION ALL
SELECT 2017 UNION ALL
SELECT 2018 UNION ALL
SELECT 2019 UNION ALL
SELECT 2020 UNION ALL
SELECT 2021 UNION ALL
SELECT 2022
)
,
RECORDS AS
(
SELECT 1 ID, 2018 YEAR, 10 YEAR_COUNT UNION ALL
SELECT 1, 2020, 20)
SELECT
COALESCE(ID, 0) AS ID,
Y.YEAR,
COALESCE(YEAR_COUNT, 0) AS YEAR_COUNT
FROM YEARS AS Y
LEFT JOIN RECORDS AS R
ON R.YEAR = Y.YEAR
這是 dbfiddle,因此您可以可視化 - https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=9e777ad925b09eb8ba299d610a78b999
Vertica SQL 不是可用的測試環境,因此這可能無法直接工作,但至少應該讓您走上正軌。
由於某些原因,LAG function 無法獲得 2019
如果 2019 確實存在於先前的表中,並且您使用 group by 來獲取年份計數,則您可能有一個排除數據的 where 子句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.