在<;15分钟和15到30分钟的sql查询
表名称客户访问在<;15分钟和15到30分钟的sql查询,sql,sql-server,Sql,Sql Server,表名称客户访问 CustomerId, phoneMacAddress, CreateDatetime 1002 1b:66:41:11:26:16 2017-07-17 07:33:31.300 1003 cb:45:85:25:2:0 2017-07-17 07:05:21.200 1004 3o:09:ab:1c:5:ab 2017-07-17 10:03:01.400 1002 1b:66:41:11:26:16
CustomerId, phoneMacAddress, CreateDatetime
1002 1b:66:41:11:26:16 2017-07-17 07:33:31.300
1003 cb:45:85:25:2:0 2017-07-17 07:05:21.200
1004 3o:09:ab:1c:5:ab 2017-07-17 10:03:01.400
1002 1b:66:41:11:26:16 2017-07-17 08:12:03.543
1002 1b:66:41:11:26:16 2017-07-17 08:12:03.543
1002 1b:66:41:11:26:16 2017-07-17 08:09:27.527
如何获取此格式的数据:
<15min 15-30min >30min
1 4 0
30min
1 4 0
SQL SERVER的更新
#Last 15 mins
SELECT COUNT(CustomerId) FROM customer_visit WHERE CreateDatetime >= DateADD(mi, -15, CURRENT_TIMESTAMP) and CreateDatetime <= CURRENT_TIMESTAMP;
#Between 15 to 30 min
SELECT COUNT(CustomerId) FROM customer_visit WHERE CreateDatetime >= DateADD(mi, -30, CURRENT_TIMESTAMP) and CreateDatetime <= DateADD(mi, -15, CURRENT_TIMESTAMP);
#最后15分钟
从customer_Visition中选择COUNT(CustomerId),其中CreateDatetime>=DateADD(mi,-15,CURRENT_TIMESTAMP)和CreateDatetime=DateADD(mi,-30,CURRENT_TIMESTAMP)以及CreateDatetime=DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15分钟)和CreateDatetime您可以使用lead()
和一些日期/时间算法。大概是这样的:
select sum(case when next_cdt < dateadd(minute, 15, CreateDateTime) then 1
else 0 end) as [<15min],
sum(case when next_cdt >= dateadd(minute, 15, CreateDateTime) and
next_cdt < dateadd(minute, 30, CreateDateTime)
then 1
else 0 end) as [15-30min],
sum(case when next_cdt >= dateadd(minute, 30, CreateDateTime) then 1
else 0 end) as [<30min]
from (select t.*,
lead(CreateDatetime) over (order by CreateDatetime) as next_cdt
from t
) t;
选择sum(当next_cdt=dateadd(分钟,30,CreateDateTime)时为1
else 0 end)as[描述如何计数?您的示例数据有3个不同的用户,但您仍然希望4个用户作为计数(15-30分钟)。我需要查询sql Server特定于产品的答案,以回答一个没有指定dbms的问题。至少告诉我们这是针对哪个产品的。
select sum(case when next_cdt < dateadd(minute, 15, CreateDateTime) then 1
else 0 end) as [<15min],
sum(case when next_cdt >= dateadd(minute, 15, CreateDateTime) and
next_cdt < dateadd(minute, 30, CreateDateTime)
then 1
else 0 end) as [15-30min],
sum(case when next_cdt >= dateadd(minute, 30, CreateDateTime) then 1
else 0 end) as [<30min]
from (select t.*,
lead(CreateDatetime) over (order by CreateDatetime) as next_cdt
from t
) t;