如何将过滤器应用于Snowflake的窗口功能? 我有这样的桌子 transaction_date booked_date 数量 2024-02-10 2024-02-09 50 2024-02-10 2024-02-10 50 2024-02-10 2024-02-11 50 2024-02-11 2024-02-10 50 2024-02-11 2024-02-11 ...

问题描述 投票:0回答:0

transaction_date

Booked_date
mount2024-02-102024-02-09502024-02-102024-02-10502024-02-102024-02-11502024-02-112024-02-10502024-02-112024-02-11502024-02-112024-02-12502024-02-122024-02-11502024-02-122024-02-12502024-02-122024-02-1350 transaction_dateBooked_date
指定交易何时发生
指定何时预订交易(即何时会计师知道发生了)
    我想要计算两种不同类型的累积总和:
  • cumulative_amount
  • :每个日期的所有交易的累计量 cumulative_amount_known_as_of_date
  • :我们知道的所有交易的累积量

这是我期望的结果:

  • transaction_date
  • cumulative_amount cumulative_amount_known_as_of_date

2024-02-101501002024-02-113002502024-02-12450400WITH transactions AS ( SELECT * FROM VALUES ('2024-02-10', '2024-02-09', 50), ('2024-02-10', '2024-02-10', 50), ('2024-02-10', '2024-02-11', 50), ('2024-02-11', '2024-02-10', 50), ('2024-02-11', '2024-02-11', 50), ('2024-02-11', '2024-02-12', 50), ('2024-02-12', '2024-02-11', 50), ('2024-02-12', '2024-02-12', 50), ('2024-02-12', '2024-02-13', 50) AS t(TRANSACTION_DATE, BOOKED_DATE, AMOUNT) ) SELECT TRANSACTION_DATE, SUM(SUM(AMOUNT)) OVER (ORDER BY TRANSACTION_DATE) AS cumulative_amount, SUM(SUM(IFF(BOOKED_DATE <= TRANSACTION_DATE, AMOUNT, 0))) OVER (ORDER BY TRANSACTION_DATE) AS cumulative_amount_known_as_of_date FROM TRANSACTIONS GROUP BY TRANSACTION_DATE cumulative_amount_as_of_date('2024-02-10', '2024-02-11', 50)我可以正确执行此操作?
我正在尝试编写雪花查询以获得此结果。这是我的最初尝试:
返回不正确的结果。例如,在2/11上,它应该排除行,因为booked_date大于trassaction_date,但是只要预订日期小于2/11。
问题是这些是字符串而不是日期。 尝试一下:

WITH transactions AS ( SELECT * FROM VALUES (CAST('2024-02-10' AS DATE), CAST('2024-02-09' AS DATE), 50), (CAST('2024-02-10' AS DATE), CAST('2024-02-10' AS DATE), 50), (CAST('2024-02-10' AS DATE), CAST('2024-02-11' AS DATE), 50), (CAST('2024-02-11' AS DATE), CAST('2024-02-10' AS DATE), 50), (CAST('2024-02-11' AS DATE), CAST('2024-02-11' AS DATE), 50), (CAST('2024-02-11' AS DATE), CAST('2024-02-12' AS DATE), 50), (CAST('2024-02-12' AS DATE), CAST('2024-02-11' AS DATE), 50), (CAST('2024-02-12' AS DATE), CAST('2024-02-12' AS DATE), 50), (CAST('2024-02-12' AS DATE), CAST('2024-02-13' AS DATE), 50) AS t(TRANSACTION_DATE, BOOKED_DATE, AMOUNT) ) SELECT TRANSACTION_DATE, SUM(SUM(AMOUNT)) OVER (ORDER BY TRANSACTION_DATE) AS cumulative_amount, SUM(SUM(IFF(BOOKED_DATE <= TRANSACTION_DATE, AMOUNT, 0))) OVER (ORDER BY TRANSACTION_DATE) AS cumulative_amount_known_as_of_date FROM TRANSACTIONS GROUP BY TRANSACTION_DATE

注意某些版本的SQL不会具有日期类型,您应该使用DateTime。 我相信雪花有约会

    

sql snowflake-cloud-data-platform aggregate-functions window-functions cumulative-sum
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.