0

その月に 10 分刻みで何件の電話を受けるかを決定する必要があります。30 分で動作する次の SQL クエリがありますが、10 分単位で動作させることはできません。私はおそらく単純なものを見逃しています..どんな助けでもいただければ幸いです。ありがとう

select 
    count(*) as Callcount,
    case 
       when datepart(mi, PBXqtime) < 30 
          then dateadd(hh, datediff(hh, 0, PBXqtime) + 0, 0)
          else dateadd(mi, 30, dateadd(hh, datediff(hh, 0, PBXqtime) + 0, 0)) 
    end as time
from 
    callcomplete 
where 
    CustId = '3100472' 
    and PBXQTime between '11/1/11 0:0:00' and '11/30/11 23:59:00'
group by 
    case 
       when datepart(mi, PBXqtime) < 30 
        then dateadd(hh, datediff(hh, 0, PBXqtime) + 0, 0) 
        else dateadd(mi, 30, dateadd(hh, datediff(hh, 0, PBXqtime) + 0, 0)) 
    end
4

2 に答える 2

1

私はこれがうまくいくと思います(しかし、私はあなたのデータを持っていないのでテストされていません):

select 
    count(*) as Callcount,
    DATEADD(minute,(DATEDIFF(minute,'20100101',PBXQTime) / 10)*10,'20100101')
from 
    callcomplete 
where 
    CustId = '3100472' 
    and PBXQTime >= '20111101'
    and PBXQTime < '20111201'
group by 
    DATEADD(minute,(DATEDIFF(minute,'20100101',PBXQTime) / 10)*10,'20100101')

ある固定時点からの分数を取得し、10で除算して(最も近い整数に切り捨てられます)、10を乗算して、同じ固定時点に加算し直します。

于 2012-09-11T14:54:53.723 に答える
1

テストしていませんが、次のとおりです。

SELECT
    DATEPART(DAY, pbxqtime) AS [day], DATEPART(HOUR, pbxqtime) AS [hour], 
    (DATEPART(MINUTE, pbxqtime) / 10) AS [interval], COUNT(*) AS Callcount
FROM
    callcomplete
WHERE
    custid = '3100472'
    AND pbxqtime BETWEEN '11/1/11 0:0:00' AND '11/30/11 23:59:00'
GROUP BY
    DATEPART(DAY, pbxqtime), DATEPART(HOUR, pbxqtime), 
    (DATEPART(MINUTE, pbxqtime) / 10)

これは、MSSQL 環境を想定しています。さらに、日付範囲をどのように指定すべきかに関して、以下で激しい議論が繰り広げられています. >=and などの単純な演算子を使用すると、<=より適切に機能し、クリーンであると主張されています。したがって、代わりに を使用できますAND pbxqtime >= '2011-11-01' AND pbxqtime < '2011-12-01'

于 2012-09-11T14:27:11.843 に答える