sql - 如何在 SQL 中不嵌套 WHERE 的情况下过滤满足 CASE 条件的用户?
问题描述
现在我有一个查询,让我知道哪些用户在成为会员前 12 个月没有购买。这些用户有 MEM_PRE_12=0,我想使用 SQL 分区更本地地过滤掉这些用户,而不是总是放置基本的 WHERE 标准。
这是我用来查找我想要/不想要的用户的 SQL。
SELECT SUM(CASE WHEN DATE <= DATEADD(month, -12, U.INSERTED_AT) THEN 1 ELSE 0 END) AS MEM_PRE_12, I.CLIENTID, I.INSTALLATIONID
FROM <<<My_Joined_Tables>>>
GROUP BY I.CLIENTID, I.INSTALLATIONID
HAVING MEM_PRE_12 != 0
ORDER BY MEM_PRE_12
在此之后,我将不得不返回并说出上述嵌套查询中 I.CLIENTID 的位置,并从购买时间超过其插入日期的用户那里选择我想要的实际信息。
如果没有这么多的所有这些连接表的嵌套,我怎么能做到这一点?
解决方案
如果您想要过去 12 个月内购买的客户的详细行,您可以使用窗口函数:
with q as (
<whatever your query logic is>
)
select q.*
from (select q.*,
SUM(CASE WHEN DATE <= DATEADD(month, -12, U.INSERTED_AT) THEN 1 ELSE 0 END) over (partition by CLIENTID, INSTALLATIONID) as AS MEM_PRE_12
from q
) q
where mem_pre_12 > 0;
推荐阅读
- flutter - Dart 系统上的多个安装?
- c# - MSBuild - 一个包参考会干扰加载单独的任务
- python - 如何从从 CSV 文件加载的自定义联合数据集构建 federated_averaging_process
- r - 您如何在 R 中组织数据并运行多项式概率?
- html - 用css在悬停时选择两个跨度
- ios - 观察我的值是否在 Swift 中达到零?
- html - (引导程序 4)容器对移动设备没有响应
- multithreading - Delphi ISAPI:当前正在运行哪个 WebModule?
- javascript - 重启浏览器后记住 Cookie
- flutter - 如何在 http post 正文中发送大型 json 数据