2016-09-23 4 views
-2

私は以下のデータを持つテーブルを持っています。私にIDと接続日数を与えるクエリを書いて欲しいです。あなただけstartdate列に基づいて、日をチェックしている場合は、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

を与えるために例えば

以下のクエリを使用します。

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の接続日間の合計数を取得しようとしていると思います(すべて1つの接続としてカウントされます)。また、接続は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のような日付だけを返します。

関連する問題