合并重叠间隔并跟踪 BigQuery SQL 中的最大值

2023-12-21

我正在尝试解决一个问题,我想合并给定列 ID 的重叠间隔,但我也想跟踪每个重叠间隔的最大值。我有每个间隔的 start_time 和 stop_time ,每个间隔都有一个与之关联的层次结构/优先级。

这些是表中的以下列: id、开始时间、停止时间、某些值

输入示例:

示例输出:


下面是 BigQuery 标准 SQL,我假设您仍然在处理与上一个问题相同的用例,所以我想让它与该解决方案保持一致 - 例如,当您还想考虑优先级时,您可以扩展它

所以无论如何:

#standardSQL
WITH check_times AS (
  SELECT id, start_time AS TIME FROM `project.dataset.table` UNION DISTINCT
  SELECT id, stop_time AS TIME FROM `project.dataset.table` 
), distinct_intervals AS (
  SELECT id, TIME AS start_time, LEAD(TIME) OVER(PARTITION BY id ORDER BY TIME) stop_time
  FROM check_times
), deduped_intervals AS (
  SELECT a.id, a.start_time, a.stop_time, MAX(some_value) some_value 
  FROM distinct_intervals a
  JOIN `project.dataset.table` b
  ON a.id = b.id 
  AND a.start_time BETWEEN b.start_time AND b.stop_time 
  AND a.stop_time BETWEEN b.start_time AND b.stop_time
  GROUP BY a.id, a.start_time, a.stop_time
), combined_intervals AS (
  SELECT id, MIN(start_time) start_time, MAX(stop_time) stop_time, MAX(some_value) some_value 
  FROM (
    SELECT id, start_time, stop_time, some_value, COUNTIF(flag) OVER(PARTITION BY id ORDER BY start_time) grp
    FROM (
      SELECT id, start_time, stop_time, some_value,
        start_time != IFNULL(LAG(stop_time) OVER(PARTITION BY id ORDER BY start_time), start_time) flag
      FROM deduped_intervals
    )
  )
  GROUP BY id, grp
)
SELECT *
FROM combined_intervals
-- ORDER BY id, start_time

如果应用到您的样本数据 - 结果是

Row id  start_time  stop_time   some_value   
1   1   0           36          50   
2   1   41          47          23    

是否可以在结果中再添加一列,以显示该时间段内的事件数量

#standardSQL
WITH check_times AS (
  SELECT id, start_time AS TIME FROM `project.dataset.table` UNION DISTINCT
  SELECT id, stop_time AS TIME FROM `project.dataset.table` 
), distinct_intervals AS (
  SELECT id, TIME AS start_time, LEAD(TIME) OVER(PARTITION BY id ORDER BY TIME) stop_time
  FROM check_times
), deduped_intervals AS (
  SELECT a.id, a.start_time, a.stop_time, MAX(some_value) some_value, ANY_VALUE(To_JSON_STRING(b)) event_hash
  FROM distinct_intervals a
  JOIN `project.dataset.table` b
  ON a.id = b.id 
  AND a.start_time BETWEEN b.start_time AND b.stop_time 
  AND a.stop_time BETWEEN b.start_time AND b.stop_time
  GROUP BY a.id, a.start_time, a.stop_time
), combined_intervals AS (
  SELECT id, MIN(start_time) start_time, MAX(stop_time) stop_time, MAX(some_value) some_value, COUNT(DISTINCT event_hash) events
  FROM (
    SELECT *, COUNTIF(flag) OVER(PARTITION BY id ORDER BY start_time) grp
    FROM (
      SELECT *,
        start_time != IFNULL(LAG(stop_time) OVER(PARTITION BY id ORDER BY start_time), start_time) flag
      FROM deduped_intervals
    )
  )
  GROUP BY id, grp
)
SELECT *
FROM combined_intervals
-- ORDER BY id, start_time

有结果

Row id  start_time  stop_time   some_value  events   
1   1   0           36          50          8    
2   1   41          47          23          1    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并重叠间隔并跟踪 BigQuery SQL 中的最大值 的相关文章

  • 从数据库中删除重复的行

    我需要从数据库中删除重复的行 我可以用简单的sql查询来完成吗 如果没有 请告诉我一些快速算法来做到这一点 Example id field one field two 1 0000000 11111111 2 2222222 333333
  • 如何获取与值匹配或存在于另一个表中的记录?

    我试图弄清楚在这种情况下如何获取所有任务 其中两个字段等于某个值或者它们存在于另一个表中 这是查询 SELECT TASKS task id TASKS task title TASKS task description TASKS tas
  • 使用 SQL 序数位置表示法的好处?

    背景资料 序数位置表示法 又称序数 是基于列列表中的列顺序的列简写 SELECT子句 而不是列名或列别名 通常支持在ORDER BY子句 某些数据库 MySQL 3 23 PostgreSQL 8 0 支持语法GROUP BY条款也是如此
  • 随机分配工作地点,每个地点不得超过指定员工人数

    我正在尝试在位置列表中选择唯一的随机发布 招聘员工位置 所有员工都已发布在这些位置 我正在尝试为他们生成一个新的随机发布位置 其 位置 条件为 员工新 随机位置将不等于他们的家乡 并且随机选择的员工及其职称必须小于或等于 地点 表中的 地点
  • 使用具有外键的表将数据从 asp.net 页面插入到我的数据库中

    我是一名初学asp net程序员 我的项目是网上购物课程 我有一些问题 我有 4 个表 它们之间有一些外键 CREATE TABLE dbo orderdetails orderid INT NOT NULL classid INT NOT
  • 如何在 T-SQL 中将 CSV 转换为记录集?

    在我的存储过程中 我传递一个过滤器 使用 WHERE Column IN 子句 作为参数 参数值以 CSV 形式给出 将此 CSV 转换为记录集的最佳方法是什么 例子 SELECT FROM Employee WHERE Name IN J
  • 查询外键列可以为NULL的地方

    我想获取数据 如果orgid 2或者如果根本没有行uid orgid is an integer 我能想到的最接近的事情就是做IS NULL但我没有得到数据uid没有一个orgid排 任何想法 select u uid u fname u
  • 无法使用 RODBC 附加到具有自动编号列的表

    我正在尝试使用 RODBC 将新行插入到 Microsoft Access 数据库中的表中 问题是主键列是一个自动编号 它似乎不允许我省略此列 我正在使用带有append TRUE 的sqlSave 函数和带有单行的数据框 我已经尝试过以下
  • SQL - 选择给定日期之前找到的第一条记录

    假设我有一张桌子 ID DATE 1 2 1 12 2 3 1 12 3 1 1 12 4 4 1 12 我将如何选择从给定日期递减时找到的第一个日期 示例 按日期查找 2012 年 4 月 1 日之前的最后一个条目 返回 SQL ID 2
  • CROSS APPLY 不适用于 SQL SERVER 2000?

    如何在 SQL Server 2000 中使用与 CROSS APPLY 等效的功能 我有一个函数返回传递的 id 的顶级父级 ALTER Function dbo fn GetTopParentRiskCategory RctId int
  • 如何用 UNION 运算符替换 OR 运算符?

    这是我的查询 SELECT h id h subject h body matnF h amount h keywords tags h closed h author id author h AcceptedAnswer h type h
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • MYSQL中收盘价的简单移动平均线计算和更新表

    我可以使用一些帮助 最好是虚拟指南 来更新下表 CREATE TABLE SYMBOL day date NOT NULL open decimal 8 3 DEFAULT NULL high decimal 8 3 DEFAULT NUL
  • 如何在MyBatis foreach中迭代HashMap?

    我正在尝试在 mybatis 中生成如下所示的 sql SELECT COL C FROM TBLE 1 WHERE COL A COL B in kp kar srt sach 而我的输入参数类型是HashMap 现在如何从映射器 xml
  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • 检查 SELECT 子句中的另一个表中是否存在某个值

    我想查询 table1 中的名称 并查找 table2 中是否存在名称 我有以下查询 但它似乎不起作用 有什么建议我做错了什么吗 select A name CASE WHEN A name in select B name in tabl
  • 是什么阻止“Select top 1 * from TableName with (nolock)”返回结果?

    我目前正在运行以下语句 select into adhoc san savedi from dps san savedi record 这花了很长时间 我想看看它走了多远 所以我运行了这个 select count from adhoc s
  • 表名搜索

    我使用以下命令在特定数据库的存储过程中搜索字符串 USE DBname SELECT Name FROM sys procedures WHERE OBJECT DEFINITION OBJECT ID LIKE xxx 修改上面的内容是否
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep

随机推荐

  • 如何使用我们的 T4 模板生成器包含自定义实用程序类?

    如何使用我们的 T4 模板生成器包含自定义实用程序类 我尝试向项目添加一个模块 但似乎无法将其包含在内 以便我的生成器使用其中的方法 Thanks 您无法从模板访问项目中的任何代码 即使可以 它会如何执行 该模板在设计时执行 使用 Inhe
  • 运行 selenium 独立服务器和集线器/节点设置有什么区别

    我从 selenium 独立服务器设置开始 java jar selenium server standalone 2 32 0 jar 这使我能够成功连接并运行我的测试 同时运行多个浏览器 当我使用以下设置作为集线器时有什么区别 java
  • DropDownList 的 SelectedIndexChanged 事件未触发

    我的网页中有一个 DropDownList 对象 当我单击它并选择不同的值时 没有任何反应 即使我有一个函数连接到SelectedIndexChanged event 首先 实际对象的 HTML 代码
  • 在 Axis2 中创建自定义异常

    我正在使用 Axis2 1 5 2 和 Eclipse 我使用 Eclipse 生成 WSDL 并根据生成的 WSDL 生成客户端代码 我创建了一个我的服务可以抛出的自定义异常 创建网络服务时一切看起来都正常 Web 服务成功启动 我可以通
  • Golang 模板变量 isset

    我创建了一个函数来检查变量是否已定义 fm isset func a interface bool if a nil a a 0 fmt Println is not set return false fmt Println is set
  • IE8 预期标识符错误

    IE 7 和 8 抛出错误 通过 jQuery 预期标识符 jQuery document ready function jQuery i18n properties name messages path myproject js i18n
  • 请提供 ENGINE 值 Django 数据库配置

    伙计们 我很困惑 我已经安装了 Django 并正常运行服务器 但是当尝试配置数据库并运行 db 同步命令时 它崩溃 返回我的 ENGINE 参数不正常 但设置文件正常 按照设置文件操作 DATABASES default ENGINE d
  • 嵌入式 Jetty - IllegalStateException:没有 SessionManager

    我在谷歌上找到了很多关于这个问题的参考 但没有答案 我正在使用最新版本的 jetty 8 1 2 v20120308 但我似乎无法获得能够使用会话的嵌入式 servlet 当然 该示例是用 scala 编写的 但任何 java 程序员都应该
  • 突然无法推送到heroku:“无法协商密钥交换方法”

    git Push heroku 突然失败了 我安装了 Node js 我认为它可能升级了一些东西并以某种方式破坏了它 我读过所有类似的帖子 它没有告诉我 提供 了哪个交换 并且一切看起来都匹配 但是调用失败 我不知所措 我成功执行了hero
  • asp.net mvc 单选按钮状态

    我正在为一个新项目尝试 asp net mvc 并且遇到了一些奇怪的事情 当我对文本框使用 MVC UI 帮助程序时 这些值在调用之间会保留下来 但是 当我使用一系列单选按钮时 选中状态不会持续存在 这是我认为的一个例子 li li
  • 在任何打开的工作簿中检测刚刚停用的工作表中的选择类型

    我想要一个方法来查询 改变后ActiveSheet 编辑 任何开放的Workbook 检测类型Selection在上一个活动表中 最重要的是 如果它是ChartObject or Range 如果它是一个Range 获取地址 这可能吗 ED
  • 无法从数据存储实体访问 ID 属性

    使用 Google App Engine SDK 和 Python 我遇到一个问题 我无法访问给定实体属性的 ID 属性 我可以访问的唯一属性是我的类模型中定义的属性 加上关键属性 请参阅下面的答案 class Question db Mo
  • pyproject.toml 文件的用途是什么?

    背景 我正准备尝试从 GitHub 下载的 Python 包 发现它没有setup py 所以我无法安装它 pip install e
  • python 正则表达式无法识别 Markdown 链接

    我正在尝试用 python 编写一个正则表达式来查找 Markdown 文本字符串中的 url 找到 url 后 我想检查它是否被 markdown 链接包裹 text 我对后者有疑问 我正在使用正则表达式 link exp 进行搜索 但结
  • 2个本地时间之间有多少个单位时间(10分钟,半小时)?爪哇8

    我想定义一个单位时间 例如12分钟或25分钟 以了解Java中2个LocalTime之间有多少个单位时间 例如 如果我定义 15 分钟作为单位时间 在 8 00 到 10 00 之间 我应该得到 8 次 您可以使用Duration http
  • Scala Future 和 Java Future 有什么区别

    Scala Future 和 Java Future 之间是否存在概念 功能或机械差异 从概念上讲 我看不出任何差异 因为它们都旨在提供异步计算的机制 主要不便之处是java util concurrent Future事实上 如果不阻塞就
  • .NET DataTable 在 Load(DataReader) 上跳过行

    我正在尝试使用以下命令填充 DataTable 以构建 LocalReport MySqlCommand cmd new MySqlCommand cmd Connection new MySqlConnection Properties
  • 如何将行单击上选择的多行提交到 JqGrid 中的数据库?

    我有一个JqGrid当我必须选择多行并单击释放按钮时 它需要将这些列发送到数据库 我怎样才能实现这个目标 我必须发送数据吗JSON格式 是的 您必须使用 JSON 或 XML 任何格式都可以 您可以使用 JSON stringify 并使用
  • Rails 4:如何识别和格式化模型属性中的链接、主题标签和提及?

    在我的 Rails 4 应用程序中 我有一个Post模型 与 copy and short copy作为自定义属性 字符串 这些属性包含社交媒体 Facebook Twitter Instagram Pinterest 等 的副本 我在我的
  • 合并重叠间隔并跟踪 BigQuery SQL 中的最大值

    我正在尝试解决一个问题 我想合并给定列 ID 的重叠间隔 但我也想跟踪每个重叠间隔的最大值 我有每个间隔的 start time 和 stop time 每个间隔都有一个与之关联的层次结构 优先级 这些是表中的以下列 id 开始时间 停止时