2016-09-23 2 views
-2

데이터가있는 테이블이 있는데, ID와 연결 일 수를 제공하는 쿼리를 작성하고 싶습니다.이 예제에 대한 쿼리 작성

ID 1에 대한 예를 들어 나에게 2 회 (2016년 9월 20일, 2016년 9월 22일)

enter image description here

+2

당신이 묻는 것이 명확하지 않습니다. 며칠이나 날짜가 필요합니까? 마지막 행의 EndTime이 9 월 25 일이면 어떨까요? 그건 그렇고, 당신이 지금까지 시도한 것을 보여 주어야 StackOverflow는 숙제 해결사가 아닙니다. http://stackoverflow.com/help/how-to-ask – Andrew

+0

샘플 테이블 데이터를 이미지로 게시하지 마십시오 .. 그리고 다른 점은 StartTime이 2016-09-20이고 EndTime이 2016-09 인 경우 id가 1 인 경우입니다. -20이면 1 또는 2로 계산해야합니까? – Wanderer

답변

1
SELECT id, COUNT(DISTINCT convert(date, startTime)) as noOfDays 
FROM your_table 
GROUP BY id 
0

을 당신은 단지 startdate 열을 기반으로 일을 확인하는 경우를 줄 , 아래 쿼리를 사용하십시오.

SELECT COUNT(DISTINCT cast (StartTime as date)) DaysCount 
FROM YourTable 
Where ID=1 
0

질문은 매우 명확하지 않습니다하지만 당신은 단순히이

Select id,TotalCount=Count(id) from YourTable group by id 
0

알처럼 할 수있다, 난 당신이 고려 여러 연결을 고려하여 모든 ID에 대한 연결 일의 총 수를 얻으려고 생각 (모두 하나의 연결로 간주됩니다). 또한 연결은 EndTime에 따라 며칠이 걸릴 수 있으며이 경우이 일수도 계산해야합니다.

이 시도 :

declare @tt table(id int, StartTime datetime, EndTime datetime) 
insert into @tt values 
(1, '2016-09-20 13:01', '2016-09-20 13:30') 
,(1, '2016-09-20 14:20', '2016-09-20 16:09') 
,(1, '2016-09-20 17:20', '2016-09-20 17:51') 
,(1, '2016-09-22 23:20', '2016-09-22 23:40') 

,(2, '2016-09-20 14:20', '2016-09-20 16:09') 
,(2, '2016-09-20 16:01', '2016-09-20 16:09') 

,(3, '2016-09-20 14:20', '2016-09-20 14:56') 
,(3, '2016-09-23 19:20', '2016-09-23 20:09') 

,(4, '2016-09-20 22:20', '2016-09-20 23:00') 

select * from @tt 

;with cte1 as 
(
    select ID, convert(Date, StartTime) as StartDate 
    , convert(Date, max(EndTime)) as EndDate 
    from @tt 
    group by id, convert(Date, StartTime) 
), 
cte2 as 
(
    select *, DATEDIFF(day, StartDate, EndDate) +1 as DaysCount 
    from cte1 
) 
select id, sum(DaysCount) as DaysCount 
from cte2 
group by id 
0
select id,count(distinct(dbo.GetDateInt(StartTime))) NoofDays from table_name group by id 

참고 : SQL 서버에서 수행이 쿼리를 2012 getDateInt() 데이터베이스 기능입니다. 그것은 2016-09-23과 같은 날짜 만 반환합니다.

관련 문제