mysql - 如何使用 MySQL 合并连续的日期和时间行

标签 mysql sql datetime window-functions gaps-and-islands

我有下表( View )

+-------+-------------+-------------+
| Data  |    Date     |    Time     |
+-------+-------------+-------------+
| Data1 |  2020-08-19 |    13:00:00 |
| Data1 |  2020-08-19 |    13:30:00 |
| Data1 |  2020-08-19 |    14:00:00 |
| Data1 |  2020-08-21 |    07:00:00 |
| Data1 |  2020-08-21 |    07:30:00 |
| Data2 |  2020-08-20 |    08:00:00 |
| Data2 |  2020-08-20 |    08:30:00 |
+-------+-------------+-------------+

我正在尝试找到一种方法来创建执行以下操作的 SQL 语句:合并具有连续日期和时间的数据(30 分钟间隔)

从我的初级到中级 SQL 能力,我未能正确使用 GROUP BY。期待答案或方向。 再次感谢

结果应该是:

+-------+-------------+-------------+
| Data  |     Date    |    Time     |
+-------+-------------+-------------+
| Data1 |  2020-08-19 |    13:00:00 |
| Data1 |  2020-08-21 |    07:00:00 |
| Data2 |  2020-08-20 |    08:00:00 |
+-------+-------------+-------------+

最佳答案

使用 LAG() 窗口函数:

select Data, Date, Time
from (
  select *,
      concat(Date, ' ', Time) - interval 30 minute <= 
      lag(concat(Date, ' ', Time)) over (partition by Data order by Date, Time) flag
  from tablename  
) t
where coalesce(flag, 0) = 0
order by Data, Date, Time

参见 demo .
结果:

> Data  | Date       | Time    
> :---- | :--------- | :-------
> Data1 | 2020-08-19 | 13:00:00
> Data1 | 2020-08-21 | 07:00:00
> Data2 | 2020-08-20 | 08:00:00

关于mysql - 如何使用 MySQL 合并连续的日期和时间行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63486973/

相关文章:

php - Codeigniter如何使用事务

json - 从 Flutter 中的 Json 错误解析日期时间

Python:非常简单的 strptime() 调用抛出错误

python - 将 Python 解析为 Golang - DateTime

php - 在where子句中使用数组,其中检查字段包含逗号分隔的单词

java - 如何在 gwt 中管理 Mysql 图像响应?

php - 如何在jQuery验证后向mysql表中插入数据

mysql - mysql 触发器编译但在必要时不会触发

SQL Server 子查询循环

java - Hibernate 方言 + datediff 函数