Запрос в SQL GROUP BY период - PullRequest
       31

Запрос в SQL GROUP BY период

0 голосов
/ 03 марта 2011

Мне нужно сделать простой запрос, чтобы подсчитать, сколько у меня записей за определенный период времени, например, день, месяц, год, псевдо-пример:

SELECT COUNT( EmployeeID)
FROM  HumanResources.Employees
WHERE   Hire Date.YEAR = 'year'
GROUP BY Hire Date.YEAR

этот код не работает, что должнобыть?

Ответы [ 6 ]

1 голос
/ 03 марта 2011

Вы можете использовать функции YEAR () и MONTH () для разделения информации на периоды.

Например:

SELECT YEAR(Hire Date), MONTH(Hire Date), COUNT( EmployeeID) FROM  
HumanResources.Employees WHERE   YEAR(Hire Date) = 'year' 
GROUP BY YEAR(Hire Date),MONTH(Hire Date) 
0 голосов
/ 03 марта 2011

Если вам нужно преобразовать его в LINQ-to-SQL, должно работать следующее:

var count = (from e in HumanResourcesDataContext.Employees
             where e.HireDate.Year = 2011 // or whatever you want it to be
             select e).Count();
0 голосов
/ 03 марта 2011

например. чтобы найти количество сотрудников, принятых на работу в 2010 году:

SELECT COUNT(EmployeeID) 
FROM HumanResources.Employees 
WHERE [Hire Date] >= '20100101' AND [Hire Date] < '20110101'

Выполнение этого будет означать, что при наличии индекса на дату найма он будет использоваться (улучшенная производительность). Как только вы начинаете манипулировать искомым столбцом (например, используя функции YEAR () или MONTH ()), вы теряете возможность использовать индекс.

Это то, что вы ищете?

0 голосов
/ 03 марта 2011

Предполагая, что вы можете установить даты начала и окончания диапазона, в котором вы хотите считать записи, я бы использовал оператор BETWEEN.

SELECT COUNT(EmployeeID)
FROM   Employees emp
WHERE  HireDate BETWEEN @rangeStartDate AND @rangeEndDate

Если работа с различными диапазонами является частью того, что вам нужнои, предполагая, что вы делаете это исключительно в T-SQL, вы можете использовать функцию DATEADD для вычисления даты окончания диапазона на основе определенного смещения и известной даты начала диапазона.

0 голосов
/ 03 марта 2011

Посмотрите на функцию DatePart SQL Server

WHERE DatePart(y, [Hire Date]) = 2011
GROUP BY DatePart(y, [Hire Date])

Вы можете заменить y на число частей даты (месяц, квартал, неделя, день, день недели и т. Д.)

0 голосов
/ 03 марта 2011

Вот запрос

select COUNT(EmployeeID)
from HumanResources.Employees
where year(Hire Date)=2011 
  and month(Hire Date)=03
group by Hire Date

Если вы хотите сделать запрос в диапазоне дат

select COUNT(EmployeeID)
from HumanResources.Employees
where Hire date between '2011/03/01' and '2011/03/03'
group by Hire Date
...