具有递归性质的 SQL 查询

SQL Query with Recursive Nature

提问人:Lasha Dolenjashvili 提问时间:11/21/2022 更新时间:3/30/2023 访问量:234

问:

假设我有一个包含 2 列的表:PURCHASE_DATEACCOUNT_NUMBER

PURCHASE_DATE ACOUNT_NUMBER
2022-01-01 123
2022-01-01 233
2022-01-01 333
2022-01-02 433
2022-01-02 233
2022-01-02 333
2022-01-03 123
2022-01-03 233
2022-01-03 335

我想每天选择1个帐户向他发送促销短信。(例如,按ACCOUNT_NUMBER排序时的第一个帐户)。但是在第二天,如果第一个帐户是我前一天已经发送短信的帐户,我需要排除他/她并选择下一个帐户。在第三天,我应该排除最近 2 天内选择的 2 个帐户,依此类推。

期望输出:

PURCHASE_DATETIME ACOUNT_NUMBER
2022-01-01 123
2022-01-02 233
2022-01-03 335

如您所见,在 2022-01-03 上,账户 123 和 233 被排除在外。

我必须在 Dremio 中解决这个问题,据我所知,我们只能创建视图,而不能创建临时表或递归 CTE。

如果可能的话,我需要自动执行此过程。你会如何处理这类问题?

SQL 德雷米奥

评论

0赞 O. Jones 11/21/2022
解决此问题的一个好方法是创建一个新表,可能称为 .在每一行中输入您发送的每条短信的帐号和日期。然后使用它来将帐户排除在考虑范围之外。sms_sent_log
0赞 Lasha Dolenjashvili 11/21/2022
谢谢你的回答。但是,正如我所提到的,我们无法自动执行表创建过程。我的意思是,我们不能在同一个查询中创建然后使用它。我们只有 VIEW。sms_sent_log

答:

0赞 dacopan 3/30/2023 #1

在 dremio 中,您可以使用 CTE 创建表,也可以在其他查询中使用它,您不需要自动创建表,您可以使用查询 SQL 来同时完成这两项操作 参考: https://docs.dremio.com/software/sql-reference/sql-commands/with/