如何在sql中找到运行序列的峰值和谷值

2024-03-09

我在 athena 中有一个数据集,因此出于此目的,您可以将其视为 postgres 数据库。数据样本可以在这里看到sql小提琴 http://www.sqlfiddle.com/#!17/4b3732/2.

这是一个示例:

  create table vals (
  timestamp int,
  type varchar(25),
  val int
  );

  insert into vals(timestamp,type, val) 
  values      (10, null, 1),
              (20, null, 2),
              (39, null, 1),
              (40,'p',1),
              (50,'p',2),
              (60,'p',1),
              (70,'v',5),
              (80,'v',6),
              (90,'v',6),
              (100,'v',3),
              (110,null,3),
              (120,'v',6),
              (130,null,3),
              (140,'p',10),
              (150,'p',8),
              (160,null,3),
              (170,'p',1),
              (180,'p',2),
              (190,'p',2),
              (200,'p',1),
              (210,null,3),
              (220,'v',1),
              (230,'v',1),
              (240,'v',3),
              (250,'v',41)               

我想要得到的是一个包含所有值但突出显示“p”的最高值和连续“v”的最低值的数据集。

所以最终我会得到:

   timestamp, type, value, is_peak
    (10, null, 1, null),
    (20, null, 2, null),
    (39, null, 1, null),
    (40,'p',1, null),
    (50,'p',2, 1),
    (60,'p',1, null),
    (70,'v',5, null),
    (80,'v',6, null),
    (90,'v',6, null),
    (100,'v',3, 1),
    (110,null,3, null),
    (120,'v',6, 1),
    (130,null,3, null),
    (140,'p',10, 1),
    (150,'p',8, null),
    (160,null,3, null),
    (170,'p',1, null),
    (180,'p',2, 1),
    (190,'p',2, null), -- either this record or 180 would be fine
    (200,'p',1, null),
    (210,null,3, null),
    (220,'v',1, 1), -- again either this or 230
    (230,'v',1, null),
    (240,'v',3, null),
    (250,'v',41, null) 

is Peak 有很多类型选择,如果它是某种密集等级或递增数字那就可以了。这样我就可以确信在连续的集合中,“标记”的值是最高或最低值。

祝你好运,感谢帮助

注意:峰值的最大值或谷值的最小值可以位于连续集中的任意位置,但是一旦类型发生变化,我们就会重新开始。


有一个小技巧可以用于解决像这样的间隙和岛屿问题。

通过从 row_number 减去 row_number 的值,您可以得到一些排名。

对于某些目的,此方法存在一些缺点。
但它适用于这种情况。

一旦计算出排名,外部查询中的其他窗口函数就可以使用它。
我们可以再次使用 row_number 来实现这一点。 但根据要求,您可以使用 DENSE_RANK 或 MIN & MAX 窗口函数代替。

然后我们把它们包裹在一个CASE根据类型的不同逻辑。

select timestamp, type, val, 
(case 
 when type = 'v' and row_number() over (partition by (rn1-rn2), type order by val, rn1) = 1 then 1
 when type = 'p' and row_number() over (partition by (rn1-rn2), type order by val desc, rn1) = 1 then 1
 end) is_peak
-- , rn1, rn2, (rn1-rn2) as rnk
from
(
  select timestamp, type, val,
   row_number() over (order by timestamp) as rn1,
   row_number() over (partition by type order by timestamp) as rn2
  from vals
) q
order by timestamp;

您可以测试 SQL Fiddlehere http://sqlfiddle.com/#!17/929ac/6/0

返回:

timestamp   type    val     is_peak
---------   ----    ----    -------
10          null    1       null
20          null    2       null
39          null    1       null
40          p       1       null
50          p       2       1
60          p       1       null
70          v       5       null
80          v       6       null
90          v       6       null
100         v       3       1
110         null    3       null
120         v       6       1
130         null    3       null
140         p       10      1
150         p       8       null
160         null    3       null
170         p       1       null
180         p       2       1
190         p       2       null
200         p       1       null
210         null    3       null
220         v       1       1
230         v       1       null
240         v       3       null
250         v       41      null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在sql中找到运行序列的峰值和谷值 的相关文章

  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra
  • 仅当所有记录都匹配时 SQL 连接

    我有3张桌子 CP carthead idOrder CP cartrows idOrder idCartRow CP shipping idCartRow idShipping dateShipped 每个 idOrder 可以有多个 i
  • 如何查询多个链接服务器?

    链接一些 SQL Server 2008 服务器 实例后 我想对这些服务器进行更通用的查询 我知道我必须像这样指定查询的命运 select from SRV INSTANCE dbname dbo foo 但是 我会针对多个链接服务器运行此
  • 如何使用内联 SQL 参数化 IN 语句的集合? [复制]

    这个问题在这里已经有答案了 可能的重复 参数化 SQL IN 子句 https stackoverflow com questions 337704 parameterizing a sql in clause 你好 我有一个查询 如下所示
  • 为 Presto 和 AWS S3 设置独立 Hive Metastore 服务

    我工作的环境中使用 S3 服务作为数据湖 但没有 AWS Athena 我正在尝试设置 Presto 以便能够查询 S3 中的数据 并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表 我正在 Docker
  • SQL Server:触发器如何读取插入、更新、删除的值

    我在一张表中有触发器并且想阅读UserId插入 更新或删除行时的值 怎么做 下面的代码不起作用 我收到错误UPDATED ALTER TRIGGER dbo UpdateUserCreditsLeft ON dbo Order AFTER
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • 表达与空列表相同的 IN 条件的可移植方式是什么?

    例如 工作于sqllite3 select from orders where custid and status in 但它失败了postgres ksysdb select code applicable objecttype from
  • SQLite 自然连接损坏?

    我刚刚开始了解 NATURAL JOIN 而 SQLite 的行为并不像我预期的那样 SELECT FROM r1 NATURAL JOIN r2 NATURAL JOIN r3 and SELECT FROM r1 NATURAL JOI
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • ORACLE:未找到数据——但数据存在

    调试包过程 当实际上有数据时却找不到数据 仅测试 SELECT SELECT trim trailing from GL SECURITY as DUMMY FROM b2k user b2k WHERE sms username FUCH
  • mysql LIKE 查询时间太长

    SQL SELECT COUNT usr id as total results FROM users as usr LEFT JOIN profile as prof ON prof uid usr uid WHERE usr usern
  • 无重复组合的交叉连接

    我知道这个问题与这个问题非常相似 对称交叉连接 https stackoverflow com questions 12490244 symmetric cross join还有这个 sql 中交叉连接的组合 不是排列 https stac
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • 在 where 子句中使用聚合函数和不同的列条件

    select PO Order Qty Avg PO Order Qty as totalAverage FROM FirstStrike Retail custom Whse Pricing QR where item code 111
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 如何使用sql脚本更改列的属性

    如何使用 sql 脚本更改列的属性 这是我尝试过但出现错误的方法 ALTER TABLE dbo tblBiometricPattern COLUMN BiometricPatternID TINYINT NOT NULL IDENTITY
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字

随机推荐

  • 如何访问pgadmin数据库设计器?

    我正在运行 pgadmin 1 18 在选项窗格中 我可以设置数据库设计器的字体 但我发现绝对无法访问此数据库设计器窗口 没有图标或菜单或任何 这是 pgadmin 1 18 下的可用功能吗 应该启用它吗 图形查询生成器 Source ht
  • Accurev 中的 diff 与 basic 和 backing 之间有什么区别

    Accurev 中与基础的差异和与支持的差异有什么区别 我从您在本论坛中的其他帖子中假设 这里的上下文将是在您的工作区中根据 支持 或 基础 对文件进行比较 与基础进行比较将在进行更改之前将您工作区中当前拥有的文件与您开始使用的版本进行比较
  • Get-ADUser 错误:枚举上下文无效

    我前几天发布了这个问题从分组对象中提取电子邮件 https stackoverflow com questions 30856287 extract e mail from grouped objects 30856711 noredire
  • AFNetworking 启用 GZIP

    我在 AFNetworking 网站上查看支持 GZIP 压缩 服务器响应的 Gzip 解压缩已内置于 AFNetworking 中 因为 NSURLConnection 将使用 Content Encoding gzip HTTP 标头自
  • ActionMailer和开发模式,可以写入文件什么的吗?

    我想在本地测试我的注册过程 开发模式 如何测试电子邮件的发送和呈现方式等 我不是指单元测试或集成测试 而是指在开发我的应用程序并进入注册页面等时 我希望它发送电子邮件 但发送到不使用 smtp 的文件 这可能吗 我有什么选择 这是可配置的c
  • 有没有办法让 Javascript 在 DOMPDF 生成的 PDF 中工作?

    我目前正在测试 DOMPDF 并让它非常适合我的目的 包括 CSS 样式 显示从 mysql 数据库获取的内容等 现在我尝试使用一些Javascript 但它不起作用 我使用了一个非常简单的脚本进行测试 页面上某处的 HTML div st
  • 在 WKUIDelegate SwiftUI 上实现 Javascript 警报并确认?

    由于我是 Swift 新手 我不确定如何为 Swift 编写一个函数 以便从 Web 应用程序进行交互式 Javascript 警报和确认 我正在使用 SwiftUI 创建一个 Web 应用程序 需要为我的 Swift Web 应用程序实现
  • 如何使用xslt合并元素?

    我有一个带有元素的段落参考类型 Example 输入文件
  • UILocalNotification 不执行任何操作

    这似乎是一个愚蠢的问题 但这是我第一次使用 UILocalNotification 我无法让它进行快速测试 它只是没有做任何事情 1 我在AppDelegate中创建了2个变量 let today NSDate let notificati
  • Java 中的类型映射

    我想实现这样一个地图 Map
  • 清除核心数据中的上下文:重置与删除注册对象?

    我一直在寻找与此相关的帖子 但我不完全理解 有什么区别 context reset and for NSManagedObjectID objId in objectIds context deleteObject context obje
  • React - 通过单击提交按钮将项目从输入添加到列表中

    我正在练习反应 并尝试通过单击提交按钮将项目添加到输入列表中 我更喜欢使用 state 和 setState 我很想得到一些帮助 我认为不需要我的代码 但无论如何这是它 class App extends Component state u
  • JACOB 库在多线程中使用时失败

    我在两个因此启动的相同线程中使用 JACOB 时遇到了一个奇怪的问题 我有一个实用程序类 它使用静态 ActiveXObject 字段将各种请求分派到 WMI 第一个线程工作正常 当第二个线程启动时 出现以下异常 com jacob com
  • 通过接口枚举 - 性能损失

    我和我的同事就通过索引访问列表的性能发生了一些争议 这非常接近圣战 VS通过枚举器 为了根据一些事实进行操作 我编写了以下测试 static void Main string args const int count 10000000 va
  • 当内存带宽受限时 SSE 和 AVX 的性能

    在下面的代码中 我更改了 dataLen 并获得了不同的效率 dataLen 400 SSE 时间 758000 us AVX 时间 483000 us SSE gt AVX dataLen 2400 SSE 时间 4212000 us A
  • 使用 Android Profiler 时应用程序不断崩溃

    我的应用程序正在执行一些位置跟踪并在需要时更新数据库 该应用程序已运行 2 天 没有任何问题 现在我尝试使用 Android Profiler Android Studio 3 01 但是 一旦我打开它 它就会运行几秒钟 然后开始使应用程序
  • 维基百科示例中高斯-牛顿方法的实现

    我对 Python 比较陌生 正在尝试实现高斯 牛顿方法 特别是维基百科页面上的示例 高斯 牛顿算法 https en wikipedia org wiki Gauss E2 80 93Newton algorithm 3个例子 以下是我到
  • 如何获取字符串中第一行的范围?

    我想更改第一行文本的格式NSTextView 给它不同的字体大小和粗细 使其看起来像标题 因此 我需要第一行的范围 一种方法是这样 guard let firstLineString textView string components s
  • 在 PYMC3 中使用自定义可能性会导致“expected ndarray”错误

    我正在尝试在 PYMC3 中使用自定义分布 广义极值或 GEV 分布 我已经编写了一些代码来计算这个 但我得到一个错误 ValueError 需要一个 ndarray 应用导致错误的节点 MakeVector dtype float64 l
  • 如何在sql中找到运行序列的峰值和谷值

    我在 athena 中有一个数据集 因此出于此目的 您可以将其视为 postgres 数据库 数据样本可以在这里看到sql小提琴 http www sqlfiddle com 17 4b3732 2 这是一个示例 create table