2

先月の毎日の 1 時間あたりの注文数を数えたいと思っています。

私は別のレポート (1) からこのWHERE節を持っています。これは、実行された時点から正しい月「先月」を決定します。

理想的には、日付ではなく時間を「左端」の列として表示したいと思います。

WHERE内で明確な日を取得し、時間 = 1、2 などの datepart をカウントできると考えました。しかし、(2) の下のこのコードは 300 を超えるレコードにつながります。

(1)

WHERE YEAR(Bookings.PICKUP_DATE) 
        = YEAR(DATEADD(mm, -1, DATEADD(m, DATEDIFF(m, 0, getdate()), 0)))
  AND MONTH(Bookings.PICKUP_DATE) 
        = MONTH(DATEADD(mm, -1, DATEADD(m, DATEDIFF(m, 0, getdate()), 0)))

(2)

select 
   distinct(datepart(dd,b.pickup_date)) as DAYOFTHEMONTH
       ,COUNT(CASE WHEN DATEPART(HH,B.PICKUP_DATE) = 1 THEN 1 ELSE 0 END)
4

1 に答える 1

1

前に明確でなかったことをお詫びします。私は今これを解決しました。

レコードが多すぎるのは、単純に、GROUP BY 句に DAY 関数が適用されていなかったためです。

データセットが正しくなり、日付範囲内のすべての日が次のように取得されます。

distinct(datepart(dd,timestamp)) as DAYOFTHEMONTH

1 時間 (この場合は午前 0 時) の注文数は次のとおりです。

count(case when datepart(hh,timestamp) = 0 then timestamp else null end) as '00:00'

私の WHERE 句は、現在の月の前の月のすべてのデータを提供しています:

WHERE
YEAR(timestamp) = YEAR(DATEADD(mm,-1,DATEADD(m,DATEDIFF(m,0,getdate()),0)))
AND
MONTH(timestamp) = MONTH(DATEADD(mm,-1,DATEADD(m,DATEDIFF(m,0,getdate()),0)))

最後に、GROUP BY に DAY を適用して正しいグループ化を取得します。

GROUP BY day(timestamp)

わかりづらくてすみません。これが将来誰かに役立つことを願っています。

みんなの編集/ヘルプに感謝します。私が尋ねる他の質問が正しいことを確認します:)

于 2013-06-16T20:18:05.833 に答える