sql - SQL如何获取购买间隔为3个月的帐户ID
问题描述
我有下表。我需要查询至少有 3 个月的差距ACCOUNT_ID
。ACCOUNT_ID
例如,ACCOUNT_ID
123 具有以下内容。他们有超过3个月的差距。我怎样才能得到这个ID?
老实说,我超级卡在这里,不知道该怎么做。
WITH LAST_PURCHASED AS (
SELECT
lp."ACCOUNT_ID",
MAX(lp."PO_DATE") AS "LAST_PUR_DATE",
SUM(lp."QTY") AS "TTL_QTY"
FROM A
AS lp
GROUP BY 1
)
SELECT
*
FROM A
INNER JOIN LAST_PURCHASED lp ON (A."ACCOUNT_ID" = lp."ACCOUNT_ID")
WHERE
lp."LAST_PURCHASED" >= DATEADD(MONTH,-3,A."PO_DATE")
LIMIT 10;
解决方案
您可以按如下方式使用 windows 功能:
select t.* from
(select t.*, max(diff) over (partition by t."ACCOUNT_ID") as max_diff from
(select t.*,
datediff(t."PO_DATE", lead(t."PO_DATE")
over (partition by t."ACCOUNT_ID"
order by t."PO_DATE") ) as diff
from A t) t ) t
where max_diff >= 3
推荐阅读
- postgresql - 如何查找已使用或消耗的 AWS RDS Postgresql 存储空间
- javascript - GSheets - 在两个值(固定数字)之间生成一个随机数字列表(固定数量),加起来等于声明的总和
- python-3.x - 数据未显示在 MatPlot 直方图中
- json - 如何使用 AJAX 从 JSON 获取这些数据?
- bash - Bash 脚本不会读取整行
- openssl - 将 AWS 私钥从 .pem 格式转换为 .der 格式以用于 java
- arrays - Google Apps:Array.map() - 如何仅向一个索引抛出错误
- javascript - 如何使用变量值来寻址数据对象键
- html - 为什么属性 align-content:flex-end; 当没有多行项目时对显示项目有影响吗?
- c - 如何在要使用 Linux 内核编译的 Linux 源代码中包含用户级 C 程序?