在SQL GROUP BY期间查询

时间:2011-03-03 09:17:23

标签: .net sql sql-server sql-server-2005 linq-to-sql

我需要做一个简单的查询来计算我在特定时间段内有多少记录 像日,月,年  伪示例:

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

这段代码不起作用,应该是什么?

6 个答案:

答案 0 :(得分:1)

您可以使用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) 

答案 1 :(得分:0)

这是查询

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

答案 2 :(得分:0)

查看SQL Server DatePart函数

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

您可以使用多个日期部分(月,季,周,日,周日等)替换y

答案 3 :(得分:0)

假设您可以建立您想要计算记录的范围的开始和结束日期,那么我将使用BETWEEN运算符。

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

如果使用不同的范围是您需要的一部分,并且假设您纯粹在T-SQL中执行此操作,则可以使用DATEADD函数根据特定偏移和已知范围开始计算范围结束日期日期。

答案 4 :(得分:0)

e.g。查找2010年雇用的员工人数:

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

这样做意味着如果有一个雇用日期的索引,它将被使用(更好的性能)。一旦开始操作正在搜索的列(例如使用YEAR()或MONTH()函数),就会失去使用索引的能力。

这是你要追求的那种东西吗?

答案 5 :(得分:0)

如果您要查找的是将其转换为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();