首页 > 解决方案 > 执行此操作的 SQL 是什么?

问题描述

如果我有一个包含两列的表,即客户 ID 和他们登录时的登录日期/时间。实际上,每次他们登录时,他们的客户 ID 和登录日期/时间都会插入到此表中。

什么是最有效的 SQL,不仅可以列出客户 ID,还可以列出他们在过去 30 天、60 天和 90 天内登录的次数?

标签: sqlsql-servertsql

解决方案


您可以使用条件聚合:

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;

推荐阅读