sql中的按时间间隔分组

sql中的按时间间隔分组,sql,sql-server,group-by,Sql,Sql Server,Group By,我需要同时显示06:00-18:00和18:00-06:00之间的数据 这是我使用的示例查询。我无法检索第二组数据。怎么办 像 1. 2. 3. 范围为06:00-18:00 四,, 5. 6. 在18:00-06:00范围内 SELECT COUNT(cp.comm_pend_id) AS comm_pend_id, cp.UserID, um.Username, CONVERT(varchar, cp.submitted_date, 101) AS Date, SUM(cp.Earn

我需要同时显示06:00-18:00和18:00-06:00之间的数据

这是我使用的示例查询。我无法检索第二组数据。怎么办

像 1. 2. 3. 范围为06:00-18:00

四,, 5. 6. 在18:00-06:00范围内

SELECT     COUNT(cp.comm_pend_id) AS comm_pend_id, cp.UserID, um.Username, CONVERT(varchar, cp.submitted_date, 101) AS Date, SUM(cp.Earning) 
                      AS Earning, SUM(cp.total_commission) AS total_commission
FROM         dbo.comm_pending AS cp INNER JOIN
                      dbo.user_master AS um ON cp.UserID = um.UserID
GROUP BY cp.UserID, CONVERT(varchar, cp.submitted_date, 101), um.Username, cp.PaidStatus, CONVERT(varchar(10), cp.submitted_date, 108)
HAVING      (cp.PaidStatus = 'unpaid') AND (CONVERT(varchar(10), cp.submitted_date, 108) BETWEEN '06:00:00' AND '18:00:00')
ORDER BY cp.UserID

您无法检索第二个组,因为18:00大于06:00,因此在同一天,它们之间没有任何内容。对于第二组,应按如下方式进行筛选:

((CONVERT(varchar(10), cp.submitted_date, 108) < '06:00:00' 
 OR 
(CONVERT(varchar(10), cp.submitted_date, 108) > '18:00:00')
((转换(varchar(10),cp.submitted\u日期,108)<'06:00:00'
或
(转换(varchar(10),cp.submitted_date,108)>'18:00:00')

您无法检索第二个组,因为18:00大于06:00,因此在同一天,它们之间没有任何内容。对于第二个组,您应按以下方式进行筛选:

((CONVERT(varchar(10), cp.submitted_date, 108) < '06:00:00' 
 OR 
(CONVERT(varchar(10), cp.submitted_date, 108) > '18:00:00')
((转换(varchar(10),cp.submitted\u日期,108)<'06:00:00'
或
(转换(varchar(10),cp.submitted_date,108)>'18:00:00')

案例陈述可能会有所帮助。例如:

create table #times (num int, dt datetime)

insert into #times values (1,'2011-4-6 0:00:00')
insert into #times values (2,'2011-4-6 4:00:00')
insert into #times values (3,'2011-4-6 8:00:00')
insert into #times values (4,'2011-4-6 12:00:00')
insert into #times values (5,'2011-4-6 16:00:00')
insert into #times values (6,'2011-4-6 20:00:00')

select 
    sum(case when (datepart(hh,dt) between 6 and 17) then num else 0 end) as daySum,
    sum(case when (datepart(hh,dt) not between 6 and 17) then num else 0 end) as nightSum
from #times

案例陈述可能会有所帮助。例如:

create table #times (num int, dt datetime)

insert into #times values (1,'2011-4-6 0:00:00')
insert into #times values (2,'2011-4-6 4:00:00')
insert into #times values (3,'2011-4-6 8:00:00')
insert into #times values (4,'2011-4-6 12:00:00')
insert into #times values (5,'2011-4-6 16:00:00')
insert into #times values (6,'2011-4-6 20:00:00')

select 
    sum(case when (datepart(hh,dt) between 6 and 17) then num else 0 end) as daySum,
    sum(case when (datepart(hh,dt) not between 6 and 17) then num else 0 end) as nightSum
from #times

我想显示06:00-18:00和18:00-06:00之间的两个组数据如果您能直观地显示您期望作为查询输出的内容会有所帮助。我想显示06:00-18:00和18:00-06:00之间的两个组数据如果您能直观地显示您期望作为查询输出的内容会有所帮助。