SQL Server GROUP BY日時は、時分を無視し、日付と合計値で選択します


86

2つのフィールド(datetimeと)を持つテーブルがありますintdatetime時間と分を無視して、日付だけでグループを作りたいです。SELECT声明は、一日のint型の合計にマップする日付を返す必要があります。


1
答えの1つを受け入れるといいでしょう(
アスカー

回答:


135
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)

11
これは、SQL Server 2008以降(Dateデータ型が導入されたとき)でのみ機能します。2005年以前の場合は、キャストをconvert(convert(int、Datetimefield)、datetime)に変更すると機能するはずです。
Derek Kromm 2011

'TypeDateは定義されたシステムタイプではありません'というエラーが表示されます。
スティーブン

5
@ Steven-次に、Derekのコメントを参照してください。これが、質問にバージョンを含めることをお勧めする理由です。
JNK 2011

@Derekこれは機能していないようです。Aは、select convert(convert(int, getdate()), datetime)間違った構文エラーで失敗する
rabudde

1
申し訳ありませんが、convert(datetime、convert(int、getdate()))
Derek Kromm 2011

24

使用するSQLサーバーのバージョンを指定しなかったため(dateタイプは2005年には使用できません)、使用することもできます。

SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed
FROM table_name
GROUP BY CONVERT(VARCHAR(10),date_column,112)

2000/2005のような古いバージョンでは、この必要性のためのvarchar変換は、使用するよりも遅くなりますDATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Used_By_Already 2017年

7

私はこれを行うために必要なオプションを調査するようになりましたが、私が使用する方法は最も簡単だと思います。

SELECT COUNT(*), 
       DATEADD(dd, DATEDIFF(dd, 0, date_field),0) as dtgroup 
FROM TABLE 
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, date_field),0) 
ORDER BY dtgroup ASC;

1
これはどのバージョンのSQLServerでも機能し、varchar変換を使用するよりも高速です。
used_By_Already 2017年

「dd」とは何か明確にできますか?何を入れるのかわかりません。
BelovedFool 2018年

「dd」は、dayに相当するdatepartです。「day」、「d」、または「dd」を使用することもできます
Jefferson Silva

3

-データ型と形式が日時データ型と一貫しているので、これが好きです

;with cte as(
    select 
        cast(utcdate as date) UtcDay, DATEPART(hour, utcdate) UtcHour, count(*) as Counts
    from dbo.mytable cd 
    where utcdate between '2014-01-14' and '2014-01-15'
    group by
        cast(utcdate as date), DATEPART(hour, utcdate)
)
select dateadd(hour, utchour, cast(utcday as datetime)) as UTCDateHour, Counts
from cte

2

個人的にはフォーマット機能が好きで、日付部分を簡単に変更できます。

     declare @format varchar(100) = 'yyyy/MM/dd'
     select 
        format(the_date,@format), 
        sum(myfield) 
     from mytable 
     group by format(the_date,@format) 
     order by format(the_date,@format) desc;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.