【问题标题】:Count/Group T-SQL计数/分组 T-SQL
【发布时间】:2013-04-03 22:16:04
【问题描述】:

您好,以下是示例数据。

DateGroupID     StartDate       EndDate
1               2013-01-01      2013-01-07
2               2013-01-08      2013-01-14
3               2013-01-15      2013-01-21
.
.
.
15              2013-04-01      2013-04-07

EMPID   GroupID     JoinDate            TerminationDate
1       A           2013-01-01          2013-03-24
2       B           2013-01-05          NULL
3       C           2013-01-05          NULL
4       A           2013-01-05          2013-03-20
5       B           2013-01-17          NULL
6       D           2013-02-01          NULL
7       A           2013-02-24          NULL
8       A           2013-02-28          NULL
9       B           2013-03-02          NULL
10      B           2013-03-12          NULL
11      C           2013-03-22          NULL
12      C           2013-03-22          NULL
13      D           2013-03-26          NULL
14      D           2013-03-29          NULL
15      A           2013-04-01          NULL

我正在尝试计算每天活跃的员工的数量,并根据我选择的 DateGroupID 按 GroupID 对其进行分组。

例如, 如果我选择 DateGroupID = 1 (在我假设的 WHERe 子句中), 我想获取 StartDate 和 EndDate 之间每天的活跃用户数。 所以我的输出应该是这样的

GROUPID     COUNT       Date
A           1           2013-01-01  (1 EMP was added to this group on this day)
B           0           2013-01-01  (NO Emp for this group were active on this day)
C           0           2013-01-01  (NO Emp for this group were active on this day)
D           0           2013-01-01  (NO Emp for this group were active on this day)

A           1           2013-01-02  (NO Emp for this group were added but 1 is active from the past)
B           0           2013-01-02  (NO Emp for this group were active on this day)
C           0           2013-01-02  (NO Emp for this group were active on this day)
D           0           2013-01-02  (NO Emp for this group were active on this day)

A           1           2013-01-03  (NO Emp for this group were added but 1 is active from the past)
B           0           2013-01-03  (NO Emp for this group were active on this day)
C           0           2013-01-03  (NO Emp for this group were active on this day)
D           0           2013-01-03  (NO Emp for this group were active on this day)

A           1           2013-01-04  (NO Emp for this group were added but 1 is active from the past)
B           0           2013-01-04  (NO Emp for this group were active on this day)
C           0           2013-01-04  (NO Emp for this group were active on this day)
D           0           2013-01-04  (NO Emp for this group were active on this day)


A           2           2013-01-05 (1 more Emp was added to this group on this day)
B           1           2013-01-05 (1 EMP was added to this group on this day)
C           1           2013-01-05 (1 EMP was added to this group on this day)
D           0           2013-01-05 (NO Emp for this group were active on this day)
.
.
.
.
A           2           2013-01-17 (2 EMP active on this day for this group)
B           2           2013-01-17 (1 more Emp was added to this group on this day))
C           1           2013-01-17 (NO Emp for this group were added but 1 is active from the past)
D           0           2013-01-17 (NO Emp for this group were active on this day)
.
.
.
A           2           2013-03-24 (2 EMP were removed and added as for this day, 2 active EMP)
B           4           2013-03-24 (So far 4 active EMP for this group)
C           3           2013-03-24 (So Far 3 active EMP for this group)
D           2           2013-03-24 (So far 2 active EMP for this group)

或者更好的视图

当我选择 DateGoupID = 3 时

GroupID     2013-01-15      2013-01-16      2013-01-17      2013-01-18      2013-01-19      2013-01-20      2013-01-21
A               2               2               2               2               2               2               2
B               1               1               2               2               2               2               2
C               1               1               1               1               1               1               1
D               0               0               0               0               0               0               0

【问题讨论】:

  • 你加入这些表格的目的是什么?还是在 startdate 和 enddate 之间加入日期?
  • 我想根据属于 DateGroupID 的任何日期检查我的 JoinDate ......这有意义吗......有点令人困惑?所以我认为这将是你假设的后半部分。

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


【解决方案1】:

您需要 DateGroup 表吗?

如果没有:

     Select GroupID, Count(EmpId), JoinDate
     from dbo.[EmployeeStartDateTableName]
     group by GroupID, JoinDate

如果是这样:

     SELECT   GroupID, Count(EmpId), JoinDate,   
     FROM         dbo.[EmployeeStartDateTableName] INNER JOIN
                  dbo.[DateGroupTableName] ON [EmployeeStartDateTableName].JoinDate =
     dbo.[DateGroupTableName].StartDate
     Where groupID = [InsertGroupId]
     group by GroupID, JoinDate

那么如果你希望条件是 DateGroupID

【讨论】:

  • 据我所知,这并没有做任何增量添加..:(
  • 那您不需要加入 DateGroupID 了吗?如果日期早于您想要的时间,您可以过滤一个组中有多少员工。
  • 它不会每天递增地添加 EMP 计数。它只显示了那天有多少 EMP 加入。
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2023-03-31
相关资源
最近更新 更多