2016-09-23 65 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 Server中執行這個查詢2012年和getDateInt()是數據庫的功能。返回日期只有2016-09-23。