[sql-server] SQL Server GROUP BY datetime은 시간 분을 무시하고 날짜 및 합계 값을 선택합니다.

나는 두 개의 필드와 테이블이 – datetimeint. 나는 datetime시간과 분을 무시하고 날짜에만 그룹을하고 싶다 . SELECT문은 하루의 INT의 합에 매핑되는 날짜를 반환해야합니다.



답변

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


답변

그가 사용하는 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)


답변

이 작업을 수행해야하는 옵션을 조사했지만 사용하는 방법이 가장 간단하다고 생각합니다.

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;


답변

-나는 이것을 데이터 유형으로 좋아하고 형식은 날짜 시간 데이터 유형과 일치합니다.

;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


답변

개인적으로 나는 포맷 기능을 선호하므로 날짜 부분을 매우 쉽게 변경할 수 있습니다.

     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;


답변