sql - SQL - 将行合并为一个?
问题描述
我正在尝试从旧的、结构不良的电话系统构建报告。我的表结构如下
User Interval Logon Logoff
3356 2020-03-27 08:45:00.000 2020-03-27 08:51:45.0620000 NULL
3356 2020-03-27 09:00:00.000 NULL NULL
3356 2020-03-27 09:15:00.000 NULL NULL
3356 2020-03-27 09:30:00.000 NULL 2020-03-27 09:32:23.000
3356 2020-03-27 09:45:00.000 NULL NULL
3356 2020-03-27 10:00:00.000 2020-03-27 10:11:25.0620000 NULL
3356 2020-03-27 10:15:00.000 NULL 2020-03-27 10:11:18.0620000
数据按 15 分钟的块分组,并显示在这 15 分钟内发生的任何登录或注销。我想要做的是产生一个输出,将任何登录与他们的下一次注销放在同一行。我的输出如下所示。
User Interval Logon Logoff
3356 2020-03-27 2020-03-27 08:51:45.0620000 2020-03-27 09:32:23.000
3356 2020-03-27 2020-03-27 10:11:25.0620000 2020-03-27 10:11:18.0620000
我在这里尝试了解决方案(My Sql merging rows),但这只是给了我一整天的第一次登录和最后一次注销 - 中间缺少一些东西。
解决方案
您可以使用lead()
和过滤。假设这些值被正确交错:
select user, convert(date, interval), logon
coalesce(logoff, next_logoff) as logoff
from (select t.*,
lead(logoff) over (partition by user order by interval) as next_logoff
from t
where logon is not null or logoff is not null
) t
where logon is not null;
这也应该处理logoff
和logon
处于相同间隔的情况。
推荐阅读
- python - 熊猫循环问题
- python - “numpy”没有属性“dtype”(很可能是由于循环导入)
- python - Scrapy/BeautifulSoup 模拟“单击”按钮以加载网站的一部分
- microsoft-teams - Microsoft 团队连接器。removeUrl 页面未加载
- javascript - 插入而不是 redactor-js 的空白
- terraform - Terraform:使用匹配键创建地图失败并出现“重复对象键”
- python - 为什么我需要 lambda func 才能绑定到
在 Tkinter 根窗口中调用方法 - sql - SQL Group By and Order -- 检索表中最新条目的详细信息
- python - 当我想使用 QWebEngine 打印 HTML 文件时,PrintPreview 中没有任何内容
- javascript - 比较 2 个字符串数组时,确定哪些元素已移动索引