如何在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如何在没有过程/函数的情况下执行命令块

    我尝试在 MySQL Workbench 上运行一段 SQL 命令 就像在 SQL Server 上一样 但它告诉我 声明在此位置无效 我在网上看到了各种这样的例子 我真的不明白为什么会出现这个错误 一些提示 代码 其中 SQL Serve
  • 嵌入定义绑定变量的 Oracle PL/SQL 代码的 Shell 脚本

    如果我运行下面的脚本 我会收到错误SP2 0552 未声明绑定变量 OUTRES 那么 如何定义绑定变量OUTRES以及在哪里定义呢 usr bin bash sqlplus s scott tiger lt lt EOF declare
  • sql连接一个表中的两个字段

    我有一个预订表 其中有两个人 我想将 person 1 作为一行返回 将 person 2 作为新行返回 但该人的 id 与人员表相关 这是我所得到的 但没有提取预订信息 SELECT people FROM select booking
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • SQL Server:删除具有外键约束的行:事务可以覆盖约束吗?

    我有一些添加了外键约束的表 它们与代码生成一起使用 以在生成的存储过程中设置特定的联接 是否可以通过在事务中调用多个删除来覆盖这些约束 特别是 C 中的 TransactionScope 或者绝对需要级联删除吗 不要使用级联删除 这样可能会
  • 自定义 Sql Server 对象资源管理器右键单击菜单项

    如何在 Sql Server 2012 的对象资源管理器中添加或自定义右键菜单项 例如 我想将新项目添加到表右键菜单中以生成自定义表创建器脚本 您可以编写一个 SSMS 加载项 See http sqlblogcasts com blogs
  • 有没有适用于 Eclipse 的 SQL 格式化插件?

    我在网上没有找到任何标准的开源 sql 格式化程序 eclipse 插件 我正在使用日食太阳神 我可以找到编辑 gt 格式化SQL但这似乎不起作用 找到一个在http ventralnet blogspot in 2010 11 sql b
  • 如何每行输出 7 条记录,一周中的每一天输出 1 条记录?

    试图在这里节省大量的数据输入 我目前有以下输出 CONTID DESCR 001 Area 1 001 Area 2 001 Area 3 我想要做的是为每个 DESCR 区域 输出 7 条记录 一周中的每一天输出 1 条记录 相应地为 0
  • 为什么有时自增列的值会有一个或多个间隙?

    我有一个这样的表 colors id color 1 red 2 blue id column is auto increment PK 当我向该表中插入一些新值时 有时会出现一些间隙id柱子 像这样的事情 INSERT INTO colo
  • 需要在SQL Server 2012中自动递增字符串

    考虑 SQL Server 2012 中的表 789 0000000 上面的数字在 SQL Server 2012 中将被视为字符串 但每当我更新记录时 我都需要增加到 1 例如 当我更新记录 1 时 它应该增加到789 0000001 当
  • 基于两个数据库表之间的数据比较创建oracle视图

    我有下表 我想创建视图以便descr O 以及对于常见的id isin两个表中的字段值 检查ratio字段并只取其中的行ratio字段值低 for descr O 如果 id isin 存在于一个表中但不存在于另一个表中 则获取这些行 双向
  • N 前缀和参数

    我有一些存储过程 CREATE PROC MyProc FullName NVARCHAR 200 NULL AS 当我将此过程称为exec MyProc Some english text 效果很好 但如果称其为exec MyProc 那
  • 执行Insert命令并返回Sql中插入的Id

    我正在 MVC 4 中使用 C 将一些值插入到 SQL 表中 实际上 我想插入值并返回最后插入记录的 ID 我使用以下代码 public class MemberBasicData public int Id get set public
  • 将交易数据从时间和状态列标准化为每个状态值的分钟数

    我有一个用户状态变化表 例如 insert time status 1 1 2017 0 00 AVAILABLE 1 1 2017 0 15 BUSY 1 1 2017 0 30 NOT AVAILABLE 1 1 2017 1 30 A
  • 我可以从列 CHECK 约束调用用户定义的函数吗?

    我有一个返回 1 或 0 的用户定义的 SQL 函数 我想从列 CHECK 约束中调用它 是的 SQL Anywhere 没有布尔数据类型 因此您必须编写一个生成 TRUE FALSE 或 UNKNOWN 的谓词 换句话说 如果函数返回 1
  • PostgreSQL 8.3 中不为空且唯一约束的增量字段

    我有一个表 项目 其中有一列 位置 位置具有唯一且非空的约束 为了在位置 x 插入新行 我首先尝试增加后续项目的位置 UPDATE items SET position position 1 WHERE position gt x 这会导致
  • 在 ms-sql 中查找最近的位置

    我将这些参数发送给我的脚本 纬度 41 0186 经度 28 964701 它是示例 我想找到最近的位置的名称 这个怎么做 查询必须更改代码的位置 sql查询 SELECT Name FROM Location WHERE Latitude
  • Oracle SQL 列转行(无需 UNPIVOT)

    我目前拥有的 Team User Apples Oranges Pears Red Adam 4 5 6 Red Avril 11 12 13 Blue David 21 22 23 需要什么 Team User Product Count
  • SQL 选择另一列中具有最大值的列

    我有一个看起来像这样的表 Name Group Value A 1 0 B 1 2 C 1 5 D 2 6 E 2 0 F 3 3 我想选择每组中具有最大值的名称 例如 有 3 个组 因此结果将是 Name C because it has
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1

随机推荐

  • 如何访问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