SQL - 如何使用日期范围SUM列

时间:2017-02-24 05:48:11

标签: sql

这是我的第一个选择。将其命名为A

EMPLID    DATE       TIMEIN    GRACEPERIOD    NUMBER_OF_LATE
------    --------   ------    -----------    --------------
000001    1/1/2017   8:16      8:15                        1
000001    1/2/2017   8:25      8:15                        1
000001    1/3/2017   8:10      8:15                        1
000002    1/1/2017   8:30      8:15                        1
000002    1/2/2017   8:14      8:15                        0
000002    1/3/2017   8:23      8:15                        1

总和的结果应该是这样的:

EMPLID    DATE                    NUMBER_OF_LATE
------    -------------------     --------------
000001    1/1/2017 - 1/3/2017                  3
000002    1/1/2017 - 1/3/2017                  2

我只想按EMPLID进行分组,并根据日期范围求和。

2 个答案:

答案 0 :(得分:0)

这应该对你有用

select EMPLID, min(DATE) + ' - ' + max(DATE), sum(NUMBER_OF_LATE)
From t
group by EMPLID

根据您使用的DBMS,您可能需要使用函数将日期转换为所需的格式。

答案 1 :(得分:0)

以两种不同的方式更新了我的答案。你可以按照

分组设置条件
  SELECT T1.EMPLID, MIN(CONVERT(DATETIME, T1.Date)) + ' ' + MAX(CONVERT(DATETIME, T1.Date)) AS DATARANGE, 
  SUM(NUmberOfLate) AS NUMBER_OF_LATE
  FROM
      (SELECT *
         FROM AAA 
        WHERE Date BETWEEN CONVERT(datetime, '1/1/2017') AND CONVERT(datetime, '1/3/2018')
       ) T1
 GROUP BY T1.EMPLID


 SELECT EMPLID,
          MIN(CONVERT(DATETIME, Date)) + ' ' + MAX(CONVERT(DATETIME, Date)) AS DATARANGE, 
          SUM(NUmberOfLate) AS NOF 
      FROM AAA
  GROUP BY EMPLID