У меня есть таблица с двумя полями - datetime
и int
. Я хочу сделать группу на datetime
только на дату, игнорирующую час и минуту. Оператор SELECT
должен возвращать дату, которая сопоставляется с суммой int за один день.
SQL Server GROUP BY datetime игнорирует часовую минуту и выбирает с датой и суммой
Ответ 1
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
Ответ 2
Поскольку он не указывал, какую версию 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)
Ответ 3
Я пришел к исследованию вариантов, которые мне нужно было бы сделать, однако, я считаю, что метод, который я использую, является самым простым:
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;
Ответ 4
- Мне это нравится, поскольку тип данных и формат остаются совместимыми с типом данных даты
;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