我有一个表格,其中输入每位员工的出勤情况,包括年假(代码:LAn
)或事假(代码:LCa
)。
+-------+-----------+-----+
| ID | Date | Att |
+-------+-----------+-----+
| 9999 | 01-Jul-19 | LCa |
| 9999 | 02-Jul-19 | LCa |
| 9999 | 03-Jul-19 | LCa |
| 10000 | 15-Jul-19 | LAn |
| 10000 | 16-Jul-19 | LAn |
| 10000 | 17-Jul-19 | LAn |
| 10000 | 18-Jul-19 | LAn |
| 10000 | 19-Jul-19 | LAn |
| 9999 | 22-Jul-19 | LCa |
| 9999 | 23-Jul-19 | LCa |
| 9999 | 24-Jul-19 | LCa |
+-------+-----------+-----+
我正在使用 MS Access 2016。
与这个问题非常相似:How do I group on continuous ranges ,但我想要 MS Access 中的解决方案。有人可以帮我吗?
我希望查询根据日期对数据进行分区,以便输出如下所示:
+-------+-----------+-----------+------+-----+
| ID | DateFrom | DateTo | Days | Att |
+-------+-----------+-----------+------+-----+
| 9999 | 01-Jul-19 | 03-Jul-19 | 3 | LCa |
| 10000 | 15-Jul-19 | 19-Jul-19 | 5 | LAn |
| 9999 | 22-Jul-19 | 24-Jul-19 | 3 | LCa |
+-------+-----------+-----------+------+-----+
最佳答案
在 MS Access 中,您可以使用相关子查询来生成序列号。然后从日期中减去序号来识别组:
select id, min(date), max(date), att
from (select t.*,
(select count(*)
from t as t2
where t2.id = t.id and
t2.date <= t.date
) as seqnum
from t
) as t
group by id, att, dateadd("d", - seqnum, date)
关于sql - 如何对连续日期范围内的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124797/