sql - Snowflake SQL 按最近滚动 30 天的事务过滤
问题描述
我有一个类似于具有客户 ID 和项目购买日期的数据表,如下所示。作为过滤器,我想返回客户 ID IFF 给定的客户 ID 在过去 30 个滚动日内至少有 1 次购买。
这可以用一个简单的WHERE
子句来完成吗?出于我的目的,这个数据表有很多记录,其中一个客户 ID 可能有数百个交易
Customer ID Item Date Purchased
233 2021-05-27
111 2021-05-27
111 2021-05-21
23 2021-05-12
412 2021-03-11
111 2021-03-03
期望的输出:
Customer ID
233
111
23
最初认为使用 CTE 最初过滤掉在过去 30 天内没有至少购买 1 件商品的任何用户。尝试了以下两个不同的 where 语句,但都没有返回错误的日期时间范围。
SELECT *
FROM data d
WHERE 30 <= datediff(days, d.ITEM_PURCHASE_DATE, current_date) X
WHERE t.DATE_CREATED <= current_date + interval '30 days' X
解决方案
的方法INTERVAL
几乎是正确的。
SELECT *
FROM data d
WHERE d.DATE_CREATED <= current_date + interval '30 days'
-- this date is from the future instead of the past
=>
SELECT *
FROM data d
WHERE d.DATE_CREATED >= current_date - interval '30 days'
推荐阅读
- firebase - 如何在 Firebase 托管环境中托管 NuxtJS (Vue) 网站?
- node.js - 如何使用 Postman 测试 Passport 本地会话身份验证?
- mongodb - 如何使用 spark mongo 连接器在 mongo 查询管道中使用聚合
- python - 我为我的 vim 安装了 coc-snippets,但执行 python 文件时出错
- google-cloud-dataflow - 在 GCS 存储桶和 Dataflow VM 之间读取和写入文件
- wordpress - 重复的页脚出现在 elementor 构建的 WP 主题中
- elasticsearch - 如何将嵌套字符串字段从 jdbc 流过滤器插件拆分为 Logstash 中的多个值?
- visual-studio-code - In VSCode, when use git compare to previous versions, can I revert one changes back?
- angular - 过滤器搜索时如何以材料角度突出显示文件夹树的节点?
- google-drive-api - Salesforce ConnectAPI 设置 Google Drive 自定义元数据