sql - 执行此操作的 SQL 是什么?
问题描述
如果我有一个包含两列的表,即客户 ID 和他们登录时的登录日期/时间。实际上,每次他们登录时,他们的客户 ID 和登录日期/时间都会插入到此表中。
什么是最有效的 SQL,不仅可以列出客户 ID,还可以列出他们在过去 30 天、60 天和 90 天内登录的次数?
解决方案
您可以使用条件聚合:
select customerid,
sum(case when logindatetime >= dateadd(day, -30, getdate()) then 1 else 0 end) as cnt_30,
sum(case when logindatetime >= dateadd(day, -60, getdate()) then 1 else 0 end) as cnt_60,
sum(case when logindatetime >= dateadd(day, -90, getdate()) then 1 else 0 end) as cnt_90
from logins
where logindatetime >= dateadd(day, -90, getdate())
group by customerid;
推荐阅读
- php - 为什么我没有从控制器的视图中获取表名?
- css - 在 react.js 中选择时更改字体/按钮的重量
- java - 将 lambda (Object -> Object) 传递给 Java 中的函数
- javascript - 加载嵌入式 css 和图像以供未经授权的用户访问时出现问题
- automapper - Automapper 从三层扁平化到两层
- azure - LUIS 培训失败:404 找不到资源
- java - Android Room 中的多对多关系查询始终只返回一个结果
- sql - MariaDb InnoDB 在进行多次插入时出现死锁
- python-3.x - 查询集 django 。如何正确编写函数以使测试通过
- c - 使用 CMake 和 MinGW 查找 DirectX12 库