Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何改进SQL中不同时间段的聚合查询_Sql Server_Join_Aggregation - Fatal编程技术网

Sql server 如何改进SQL中不同时间段的聚合查询

Sql server 如何改进SQL中不同时间段的聚合查询,sql-server,join,aggregation,Sql Server,Join,Aggregation,我正在使用SQL server 2017 创建表的脚本: Create table tb( ID INT Identity(1,1), MUID INT , VisitDTM DateTime not null, EventAction Varchar(20) ); Insert into tb(MUID,VisitDTM,EventAction) values (5001,'2021-03-08 13:18:06.000','Open'), (5001

我正在使用SQL server 2017

创建表的脚本:

Create table tb(
  ID INT Identity(1,1),
  MUID INT ,
  VisitDTM DateTime not null,
  EventAction Varchar(20)
  );
  
  Insert into tb(MUID,VisitDTM,EventAction)
  values
  (5001,'2021-03-08 13:18:06.000','Open'),
  (5001,'2021-03-12 13:05:13.000','Ad'),
  (5001,'2021-03-18 13:18:06.000','Ad'),
  (5001,'2021-05-29 13:18:06.000','Open'),
  (5001,'2021-05-31 13:18:06.000','Open'),
  (5001,'2021-06-02 00:48:49.000','Open'),
  
  (5005,'2021-01-01 13:18:06.000','Open'),
  (5005,'2021-02-11 13:05:13.000','Ad'),
  (5005,'2021-03-18 13:18:06.000','Ad'),
  (5005,'2021-05-02 13:18:06.000','Open'),
  (5005,'2021-05-31 13:18:06.000','Open'),
  (5005,'2021-05-31 23:58:47.000','Open'),
  (5005,'2021-05-31 23:58:47.000','Ad'),
  (5005,'2021-05-31 23:58:47.000','Ad'),
  (5005,'2021-05-31 23:59:43.000','Open')
我正在尝试为不同的时间段(过去7天、过去30天、过去60天、过去90天)进行聚合

我尝试使用Join here:

select *
from
(select MUID, count(VisitDTM) as VisitsinLast7days
from tb
where VisitDTM > DATEADD(day, -7, GETDATE())
group by MUID
)a
Join
(
select MUID, count(VisitDTM) as VisitsinLast30days
from tb
where VisitDTM > DATEADD(day, -30, GETDATE())
group by MUID
  ) b on a.MUID = b.MUID
我能知道更好的方法吗

注意我有1250万条记录。因此,寻找更好的方法来做到这一点/

提前感谢

我想,您可以使用“条件聚合”

SELECT X.[MUID],
SUM(
     CASE
        WHEN VisitDTM > DATEADD(day, -7, GETDATE()) THEN 1
        ELSE 0
     END
   )AS Last7Days,
SUM(
   CASE
      WHEN VisitDTM > DATEADD(day, -30, GETDATE()) THEN 1
      ELSE 0
   END
  )AS Last30Days
 FROM [dbo].[tb] AS X
 GROUP BY X.MUID