我们可以使用group by和where具有相同fieldname的条件

时间:2011-08-16 03:57:15

标签: sql sql-server tsql sql-server-2008

我有一个要求,就是必须提取用户选择的日期范围内的所有记录,选择从2011年1月15日到2011年8月20日开始的所有员工,并按日期分组。

我应该如何编写SQL查询:

  SELECT *
    FROM employees 
   WHERE startdate >= '15-jan-2011' 
     AND startdate <= '20-aug-2011'
GROUP BY startdate

2 个答案:

答案 0 :(得分:16)

绝对。它将导致过滤日期范围内的记录,然后在有数据的每一天对其进行分组。

应该注意的是,您只能选择startdate,然后选择您正在计算的聚合。否则,它应该完全正常。

例如,此查询将为您提供每个startdate的员工数量:

SELECT startdate, count(*)
FROM employees 
WHERE startdate >= '15-jan-2011' 
      AND startdate <= '20-aug-2011'
GROUP BY startdate

答案 1 :(得分:2)

您可以,但“GROUP BY”子句用于将行集合分组,因此对您的问题(或任何涉及“SELECT *”的内容)没有意义。

回答你的问题:

SELECT DATEADD(dd, 0, DATEDIFF(dd,0,StartDate)) AS 'StartDate', <other fields>
FROM   Employees
WHERE  StartDate BETWEEN '15-Jan-2011' AND '20-Jan-2011'
ORDER BY StartDate

注意:从here

开始剥离时间