按日期分组-Month -Day Hour and Time Query

时间:2014-11-14 20:52:45

标签: sql sql-server

按日期分组-Month -Day Hour and Time Query

我想按Rundate和JobDateStamp分组yy / mm / dd hh:mm 没有秒

结果

[RunDate]          [count]  
12/11/2014 21:00     3  
13/11/2014 21:00     1  

2014年11月12日运行了3个工作岗位(3个日期和时间) 2014年11月13日(1个日期和时间)运行了大量工作

**create table tbl_tasks**  

(  
Rundate datetime,  
JobDateStamp datetime,  
Runs int  
)  

insert into tbl_tasks values   
('2014-11-13 21:00:46.393','2014-11-13 21:36:27.393',1),  
('2014-11-13 21:00:46.393','2014-11-13 21:36:25.393',1),  
('2014-11-13 21:00:46.393','2014-11-13 21:36:24.393',1),  
('2014-11-12 21:00:47.000','2014-11-13 14:14:46.393',1),  
('2014-11-12 21:00:47.000','2014-11-13 14:12:46.393',1),  
('2014-11-12 21:00:47.000','2014-11-12 21:04:43.393',1),  
('2014-11-12 21:00:47.000','2014-11-12 21:04:41.393',1)  

此数据是查询的结果,下一步是分组 yy / mm / dd hh:mm

Rundate JobDateStamp运行
2014-11-13 21:00:46.393 2014-11-13 21:36:27.393 1
2014-11-13 21:00:46.393 2014-11-13 21:36:25.393 1
2014-11-13 21:00:46.393 2014-11-13 21:36:24.393 1
2014-11-12 21:00:47.000 2014-11-13 14:14:46.393 1
2014-11-12 21:00:47.000 2014-11-13 14:12:46.393 1
2014-11-12 21:00:47.000 2014-11-12 21:04:43.393 1
2014-11-12 21:00:47.000 2014-11-12 21:04:41.393 1

3 个答案:

答案 0 :(得分:2)

您可以通过将时间转换为分钟并使用count(distinct .. )

来实现

由于您需要通过jobdatestamp进一步过滤,因此需要在计数中使用它

SELECT dateadd(minute, datediff(minute, 0, rundate), 0) , 
       count( distinct dateadd(minute, datediff(minute, 0, JobDateStamp), 0))
FROM tbl_tasks
GROUP by dateadd(minute, datediff(minute, 0, rundate), 0) 

答案 1 :(得分:1)

只需将日期时间截断为上一分钟,然后按该值分组:

select 
    dateadd(minute, datediff(minute, 0, Rundate ), 0) RunDate,
    COUNT(*) Count
FROM tbl_tasks  
GROUP BY dateadd(minute, datediff(minute, 0, Rundate ), 0) 

答案 2 :(得分:0)

如果您使用的是SQL Server 2012,您还可以使用Format进行分组:

Select  Rundate, Count(*) Count
From
(
    Select  Format(Rundate, 'yyyy/MM/dd HH:mm') Rundate, JobDateStamp, Runs
    From    tbl_tasks
)A
Group By Rundate 
相关问题