2015-06-18 2 views
1

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

Первый запрос, я попытался было:

SELECT CreatedDateTime, count(CreatedDateTime) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY CreatedDateTime 
ORDER BY CreatedDateTime DESC 

Однако я думаю, что метка на данных подсчитывает каждую запись по отдельности, а не группирует записей в день. Как изменить этот запрос?

Я пробовал ниже, но он возвращается с неправильным синтаксисом рядом с ключевым словом «FROM».

SELECT convert(char(10), dbo.Quotes.CreatedDateTime, count (CreatedDateTime) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY convert(char(10), dbo.Quotes.CreatedDateTime 
ORDER BY CreatedDateTime DESC 
+0

Вы упускаете формат от новообращенного, например «CreatedDateTime, 112) , count "или вы можете использовать Convert (date, CreatedDateTime) –

+0

' GROUP BY CAST (CreatedDateTime AS DATE) ' –

ответ

1

Вы подсчета тот же столбец, который вы используете для GROUP BY.
Естественно, в каждой группе будет только одно значение. попробуйте вместо этого использовать COUNT(*).
Кроме того, чтобы игнорировать часть времени простейшую вещь, чтобы сделать отливают на сегодняшний день (если ваша версия базы данных в 2008 или выше)

SELECT CAST(CreatedDateTime as Date), count(*) 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY CAST(CreatedDateTime as Date) 
ORDER BY CAST(CreatedDateTime as Date) DESC 
+0

Отлично! Thank-you – Skonz

+0

Если ответ решил вашу проблему, вы должны принять его, чтобы другие люди знали, что проблема решена. –

1

Да, поскольку вы группируете дату и время, и вам нужно будет группировать только по времени.

Просто измените положение группы в этом

GROUP BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') 

так ваш запрос будет выглядеть

SELECT CreatedDateTime, count(*) as totalQuotes 
FROM dbo.Quotes 
WHERE CreatedDateTime >= dateadd(day, datediff(day,0,GetDate())- 14,0) 
GROUP BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') 
ORDER BY DATE_FORMAT(CreatedDateTime , '%Y-%m-%d') DESC 
+1

AFAIK, DATE_FORMAT - это mysql, а не Sql Server ... –

+0

Да, правильно .. просто увидел, что это было упомянуто в теги. Я сделал это согласно mysql –

Смежные вопросы