sql - 如何对连续日期范围内的数据进行分组

标签 sql ms-access

我有一个表格,其中输入每位员工的出勤情况,包括年假(代码: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/

相关文章:

php mysqli_bind_param 函数问题。尝试实现准备好的语句

mysql - 插入表格时自动保存某些行的选项有哪些?

java - 游标 while 循环返回除最后一个值之外的每个值

sql - ORA-29908 : missing primary invocation for ancillary operator

ms-access - Access 2013 无法将查找显示控件设置为文本框

c# - 在不知道主键的情况下插入多个表

vba - MS Access VBA 创建一个即时弹出窗口或模拟一个

ms-access - 从外部 VBScript 在 Access 2010 中运行 VBA 宏

sql-server-2005 - 删除链接到 Microsoft Access 的慢速 SQL Server 表

vb.net - 在 VB 2008 中查询 MS Access 数据库