开发者社区> 问答> 正文

SQL按时间间隔分组,计数和求和

我需要在Microsoft服务器SQL / T-SQL中找到具有15至20年且超过20年的工作经验的员工的总销售额。

我有一个看起来像这样的数据集:

Hiredate       EmployeeID     Sales
0   1986-01-02     90             20,000
1   1989-02-30     80             10,000  
2   2000-01-20     91             50,000
3   2009-05-07     92             60,000
4   2007-07-06     47             30,000
5   1999-01-24     66             44,000
6   2005-09-22     21             30,000

到目前为止,我所做的是:

SELECT SUM(EmployeeID) 
FROM (
SELECT DATEDIFF(year,Hiredate, GETDATE()), COUNT(EmployeeID)
FROM abc.table
WHERE DATEDIFF(year, Hiredate, GETDATE()) > 20
GROUP BY DATEDIFF(year,Hiredate, GETDATE())
)

这部分给了我日期上的差异,以及员工的数量,但是我在如何分隔团队然后求和销售额上感到困惑。

SELECT DATEDIFF(year,Hiredate, GETDATE()), COUNT(EmployeeID)
  FROM abc.table
  WHERE DATEDIFF(year, Hiredate, GETDATE()) > 20
  GROUP BY DATEDIFF(year,Hiredate, GETDATE())

谢谢

展开
收起
祖安文状元 2020-01-04 16:00:29 723 0
1 条回答
写回答
取消 提交回答
  • 不要使用datediff()-它不会达到您的期望。它计算两个日期之间的“边界”数。对于年份,即12月31日至1月1日之间的午夜。

    另外,在列上应用函数通常会使创建最佳执行计划变得更加困难。

    您似乎想要:

    SELECT SUM(SALES) 
    FROM abc
    WHERE HireDate >= DATEADD(year, -20, GETDATE()) AND
          HireDate < DATEADD(year, -14 GETDATE());
    
    2020-01-04 16:00:42
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载