【发布时间】:2018-08-01 13:30:17
【问题描述】:
假设我有一个包含员工开始和结束日期的“员工”表,如下所示:
员工
employee_id start_date end_date
53 '19901117' '99991231'
54 '19910208' '20010512'
55 '19910415' '20120130'
. . .
. . .
. . .
假设我想获得在月底雇用的员工的每月数量。所以我追求的结果数据集如下所示:
month count of employees
'20150131' 120
'20150228' 118
'20150331' 122
. .
. .
. .
我目前知道如何做到这一点的最好方法是创建一个“帮助”表来加入,例如:
helper_tbl
month
'20150131'
'20150228'
'20150331'
.
.
.
然后像这样进行查询:
SELECT t0b.month,
count(t0a.employee_id)
FROM employees t0a
JOIN helper_tbl t0b
ON t0b.month BETWEEN t0a.start_date AND t0a.end_date
GROUP BY t0b.month
但是,这对我来说有点烦人,因为这意味着我必须一直创建这些小帮助表,并且它们会弄乱我的架构。我觉得其他人必须遇到对“帮助”表的同样需求,但我猜人们已经找到了一种更好的方法来解决这个问题,而不是那么手动。或者你们真的只是像我一样继续创建“帮助”表来解决这些情况吗?
我知道这个问题对于堆栈溢出有点开放,所以让我提供一个更封闭的问题版本,“只考虑'员工'表,你会怎么做得到我上面显示的结果数据集?"
【问题讨论】:
-
这些列是什么数据类型 - 字符串或日期?你让它们看起来像字符串,这会有点奇怪。
-
employee_id 的数字和日期的字符串。我的公司使用这样的字符串作为日期列(我知道,这很糟糕)。