SQL Server GROUP BY datetime игнорирует часовую минуту и ​​выбор со значением даты и суммы - PullRequest
70 голосов
/ 14 сентября 2011

У меня есть таблица с двумя полями - datetime и int. Я хочу сделать группу на datetime только в день, игнорируя часы и минуты. Оператор SELECT должен возвращать дату, которая сопоставляется с суммой int одного дня.

Ответы [ 5 ]

113 голосов
/ 14 сентября 2011
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
24 голосов
/ 14 сентября 2011

Поскольку он не указал, какую версию 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)
5 голосов
/ 21 мая 2015

Я приехал, исследуя варианты, которые мне придется сделать, однако я считаю, что метод, который я использую, является самым простым:

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;
3 голосов
/ 15 января 2014

- мне нравится этот тип данных, и формат остается в соответствии с типом данных даты и времени

;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 голосов
/ 11 мая 2018

Лично я предпочитаю функцию форматирования, позволяющую просто очень легко изменить часть даты.

     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;
...