web-dev-qa-db-ja.com

SQL Server GROUP BY datetimeは時分を無視し、日付と合計値を持つselect

datetimeintの2つのフィールドを持つテーブルがあります。時間と分を無視して、datetimeでのみグループ化を行いたい。 SELECTステートメントは、1日のintの合計にマップされる日付を返す必要があります。

73
Steven
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
115
JNK

彼が使用する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)
24
rabudde

私はこれをしなければならないオプションを研究し始めましたが、私が使用する方法は最も簡単だと思います:

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;
6
Jefferson Silva

-データ型と形式が日時データ型と一貫性を保つため、私はこれが好きです

;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
3
SqlHog

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

     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;
2
Krik