2015-06-30 2 views
0

У меня есть стол со столбцом datetime в течение многих лет, я хотел бы знать, если несколько дней недели занят чем другие (например, в понедельник видят больше действий, которые говорят в пятницу). то же самое в течение месяцев (например, июль больше занят, чем декабрь). Также хотелось бы получить std отклонение этих подсчетов, чтобы увидеть, сколько изменений существует.Даты, разломанные по месяцам и дням недели

Итак, если у меня есть столбец datetime, называемый activityDate, как я сломаюсь и получаю ежедневные и ежемесячные подсчеты и отклонения std?

с помощью SQL Server 2012

Благодарности

+0

Используйте функцию DATEPART, а затем группу по DayOfWeek, месяц, год. – Chuck

ответ

1
SELECT mon, cnt, STDEV(cnt) OVER (ORDER BY mon) 
FROM (
     SELECT DATEPART(month, activityDate) mon, COUNT(*) cnt 
     FROM mytable 
     GROUP BY 
       DATEPART(month, activityDate) 
     ) q 

SELECT wd, cnt, STDEV(cnt) OVER (ORDER BY wd) 
FROM (
     SELECT DATEPART(weekday, activityDate) wd, COUNT(*) cnt 
     FROM mytable 
     GROUP BY 
       DATEPART(weekday, activityDate) 
     ) q 
+0

Спасибо. Пробовал первый запрос, дал мне ошибку: Msg 8120, уровень 16, состояние 1, строка 1 Столбец «q.mon» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – Bill

+0

@Bill: см. Обновление – Quassnoi

0

Отъезд datename() функцию из MSDN: Datename

select datename(dw,getdate()),datename(m,getdate()) 
Смежные вопросы