2017-04-05 75 views
1

我在SQL Server 2008中的表如下数据:如何计算工作日数?

user ,number of request, date number of request 

user1, ID1139151, 2017-03-15 13:10:01.000 

user1, ID1139152, 2017-03-13 14:31:05.000 

user2, ID1139153, 2017-03-16 10:38:08.000 

user2, ID1139154, 2017-03-16 09:26:04.000 

user2, ID1139155, 2017-03-17 18:09:15.000 

user2, ID1139156, 2017-03-17 20:14:29.000 

user2, ID1139157, 2017-03-28 11:18:18.000 

帮我用SQL查询的帮助每一位用户发现天的SUMM。

Result: 

user, date number of request 

user1, 2 

user2, 3 

脚本来创建数据:

CREATE TABLE Mytable (

    [user] varchar(50) NOT NULL, 

    [number of request] varchar(15) NOT NULL, 

    [date_number_of_request] datetime NOT NULL, ) 


INSERT INTO Mytable 

VALUES 

('user1','ID1139151','2017-03-15 13:10:01.000'), 

('user1','ID1139152','2017-03-13 14:31:05.000'), 

('user2','ID1139153','2017-03-16 10:38:08.000'), 

('user2','ID1139154','2017-03-16 09:26:04.000'), 

('user2','ID1139155','2017-03-17 18:09:15.000'), 

('user2','ID1139156','2017-03-17 20:14:29.000'), 

('user2','ID1139157','2017-03-28 11:18:18.000'); 
+0

加1的样本数据,前进尝试包括你已经尝试以及 – TheGameiswar

+0

一种方法的任何企图是添加[日历表(http://www.sqlservercentral.com/blogs/dwainsql/ 2014/03/30/calendar-tables-in-t-sql /)到你的数据库。这可以用来过滤非工作日。银行假期不能被识别,除非你将它们存储在某个地方。 –

回答

2

使用count(distinct col)和截断日期时间更新与dateadd(day,datediff(day, 0, [date_number_of_request]), 0)

select [user] 
    , DaysWithRequests = count(distinct 
     dateadd(day,datediff(day, 0, [date_number_of_request]), 0) 
     ) 
from mytable 
group by [user] 

相同的查询使用convert(date,[date_number_of_request])

select [user] 
    , DaysWithRequests = count(distinct convert(date,[date_number_of_request])) 
from mytable 
group by [user] 

rextester演示:http://rextester.com/EMKMK22273

回报:

+-------+------------------+ 
| user | DaysWithRequests | 
+-------+------------------+ 
| user1 |    2 | 
| user2 |    3 | 
+-------+------------------+ 
1

也许做这样的事情:

SELECT users, COUNT(DISTINCT CAST(date_number_of_request AS date)) 
FROM mytable 
GROUP BY users 
1

看样子你想要的,为每个用户的不同数量的计数date_number_of_request列中的日期?

select user, count(distinct convert(date, date_number_of_request)) 
    from myTable 
group by user