2


3

DateTime型の EventTime`というフィールドを含み、その値に日付と時刻の両方の要素が含まれるテーブル Event`を考えると、私は毎月のイベントの数を数える集計クエリを作成する必要があります。

結果として得られるGroup Byフィールドのタイプも、0のtime要素を持つDate Timeになり、月の1日に設定されます。

これは私がこれまでに持っているものですが、それは非常にエレガントではないと私はそれが特に効率的であるとは思わない。

SELECT COUNT(1)として[CountOfEvents]、DATEADD(d、1  - 日(EventTime)、DATEADD(dd、0、DATEDIFF(dd、0、EventTime)))AS [月] FROM [イベント] GROUP BY DATEADD(d 、1  -  DAY(EventTime)、DATEADD(dd、0、DATEDIFF(dd、0、EventTime)))

より効率的または優雅さのためのより良い提案?

4 回答


10


これは今月のフロアです。

dateadd(月、日付付き日付(m、0、GETDATE())、0)を選択します。

出力:

----------------------- 2009-10-01 00:00:00.000

(影響を受ける1行)

だからこれを試してください:

CountOFとしてSELECT COUNT(*)、dateadd(月、datediff(m、0、EventTime)、0)FROM [イベント] GROUP BY dateadd(月、datediff(m、0、EventTime)、0)ORDER BY 2


1


SELECT COUNT(1)AS [CountOfEvents]、DATEADD(月、DATEDIFF(月、0、[EventTime])、0)AS [月]から[イベント] GROUP BY DATEADD(月、DATEDIFF(月、0、[EventTime]) )、0)


0


あなたが使うことができる MONTH(GetDate()) T-SQL関数があります。

また、あなたはちょうど日時から時間を取り除こうとしていますか?

もしそうなら、これを試してみてください:

DATEADD(d、DATEDIFF(d、0、GetDate())、0)

それは少しきれいで読みやすいです。


0


もっと読みやすいかもしれません。

SELECT COUNT(1)AS [CountOfEvents]、CONVERT(日付時刻、CONVERT(varchar、EventTime、112))1  - 日(EventTime)AS [月] FROM [イベント] GROUP BY CONVERT(日付時刻、CONVERT(varchar、EventTime、112) ))1  -  DAY(EventTime)