我有一个要求,就是必须提取用户选择的日期范围内的所有记录,选择从2011年1月15日到2011年8月20日开始的所有员工,并按日期分组。
我应该如何编写SQL查询:
SELECT *
FROM employees
WHERE startdate >= '15-jan-2011'
AND startdate <= '20-aug-2011'
GROUP BY startdate
答案 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
开始剥离时间