0

およそ3000行のリストがあります。各行の終了時刻は異なります。下記参照

Fund name | Fund ID   | RedeemTime  | PurchaseTime | LatestTime  |
__________  _________  ____________   ____________ | ___________ |
Title1    | IDnumber  |  4:00:00    | 14:30:00     |  14:30:00   |
Title2    | IDnumber2 | 13:30:00    | 12:00:00     |  13:30:00   |
Title3    | IDnumber3 | 10:00:00    | 14:00:00     |  14:00:00   |
Title4    | IDnumber4 | 10:00:00    | 10:30:00     |  10:30:00   |

現在、5列目のcaseステートメントを使用して、2回のうちの後半を検索しています。

私は5番目の列を取り、1時間ごとに何が起こるかを数える必要があります。たとえば、上の表では、結果は次のようになります。

Hour     |  Count
_________ _______
10:00:00 |    1
13:00:00 |    1
14:00:00 |    2
4

2 に答える 2

3

サブクエリで2回「正規化」することができます。CTEを使用して時間のリストを生成できます。たとえば、2012年8月のすべての時間:

; with  HourList as
        (
        select  cast('2012-08-01' as datetime) as DateCol
        union all
        select  dateadd(hour, 1, DateCol)
        from    HourList
        where   dateadd(hour, 1, DateCol) < '2012-09-01'
        )
select  hr.DateCol
,       count(yt.StartTime)
from    HourList hr
left join
        (
        select  case when time1 > time2 then time1 else time2 end as EndTime
        from    YourTable
        ) yt
on      yt.EndTime <= hr.DateCol and hr.DateCol < dateadd(hour, 1, yt.EndTime)
group by
        hr.DateCol
option  (maxrecursion 0)

時間でいっぱいのテーブルがない場合は、それを生成する方法があります。それらはすべてデータベースに依存します。したがって、それについて支援が必要な場合は、使用しているデータベースを投稿してください。

于 2012-08-21T18:09:23.773 に答える
1

時間フィールドのみを使用していると仮定します...

まず、どちらの時間が大きいかを選択します。

(CASE WHEN time2 > time1 THEN time2
ELSE time1) as time

SELECTその後、あなたCOUNTGROUP BY HOUR(time)

于 2012-08-21T18:03:10.603 に答える