【问题标题】:Can we use group by and where condition with same fieldname我们可以使用具有相同字段名的 group by 和 where 条件吗
【发布时间】:2011-08-16 03:57:14
【问题描述】:

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

我应该如何为此编写 SQL 查询:

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

【问题讨论】:

  • 您的要求在书面上没有意义。如果您有两名从 1 月 15 日开始的员工,您究竟希望返回什么?您能否展示一些样本数据和期望的结果,包括同一天雇用多名员工的情况?另外,如果两名员工的薪水或姓名不同,您希望返回什么?也许你误解了GROUP BY 的作用?

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


【解决方案1】:

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

应该注意的是,您只能选择开始日期,然后选择您正在计算的任何聚合。否则,它应该可以正常工作。

例如,此查询将为您提供每个开始日期的员工数量:

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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 2014-03-10
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      相关资源
      最近更新 更多