如何从序列中提取升序子集?

2024-03-26

我有一些数据:

┌─id--┬─serial┐
│ 1   │     1 │
│ 2   │     2 │
│ 3   │     3 │
│ 4   │     1 │
│ 5   │     3 │
│ 6   │     2 │
│ 7   │     1 │
│ 8   │     2 │
│ 9   │     3 │
│ 10  │     1 │
│ 11  │     2 │
│ 12  │     1 │
│ 13  │     2 │
│ 14  │     3 │
└─────┴───────┘

我想按“串行”列进行分组,其中组规则是:任何升序子集(像这样,1 -> 2 -> 3)都是一个组。

我期望的结果:

┌─id--┬─serial┬─group─┐
│ 1   │     1 │ 1     │
│ 2   │     2 │ 1     │
│ 3   │     3 │ 1     │
│ 4   │     1 │ 2     │
│ 5   │     3 │ 2     │
│ 6   │     2 │ 3     │
│ 7   │     1 │ 4     │
│ 8   │     2 │ 4     │
│ 9   │     3 │ 4     │
│ 10  │     1 │ 5     │
│ 11  │     2 │ 5     │
│ 12  │     1 │ 6     │
│ 13  │     2 │ 6     │
│ 14  │     3 │ 6     │
└─────┴───────┴───────┘

如果我理解正确的话,你想将集合分成具有上升趋势的子集。

SELECT r.1 id, r.2 serial, r.3 AS group, arrayJoin(result) r
FROM (
  SELECT 
    groupArray((id, serial)) sourceArray,
    /* find indexes where the ascending trend is broken */  
    arrayFilter(i -> (i = 1 OR sourceArray[i - 1].2 > sourceArray[i].2), arrayEnumerate(sourceArray)) trendBrokenIndexes,
    /* select all groups with ascending trend and assign them group-id */
    arrayMap(i -> 
      (i, arraySlice(sourceArray, trendBrokenIndexes[i], i < length(trendBrokenIndexes) ? trendBrokenIndexes[i+1] - trendBrokenIndexes[i] : null)), 
      arrayEnumerate(trendBrokenIndexes)) groups,
    /* prepare the result */
    arrayReduce('groupArrayArray', arrayMap(x -> arrayMap(y -> (y.1, y.2, x.1), x.2), groups)) result    
  FROM (
    /* source data */
    SELECT arrayJoin([(1 , 1),(2 , 2),(3 , 3),(4 , 1),(5 , 3),(6 , 2),(7 , 1),(8 , 2),(9 , 3),(10, 1),(11, 2),(12, 1),(13, 2),(14, 3)]) a, a.1 id, a.2 serial
    ORDER BY id))

/* Result
┌─id─┬─serial─┬─group─┬─r────────┐
│  1 │      1 │     1 │ (1,1,1)  │
│  2 │      2 │     1 │ (2,2,1)  │
│  3 │      3 │     1 │ (3,3,1)  │
│  4 │      1 │     2 │ (4,1,2)  │
│  5 │      3 │     2 │ (5,3,2)  │
│  6 │      2 │     3 │ (6,2,3)  │
│  7 │      1 │     4 │ (7,1,4)  │
│  8 │      2 │     4 │ (8,2,4)  │
│  9 │      3 │     4 │ (9,3,4)  │
│ 10 │      1 │     5 │ (10,1,5) │
│ 11 │      2 │     5 │ (11,2,5) │
│ 12 │      1 │     6 │ (12,1,6) │
│ 13 │      2 │     6 │ (13,2,6) │
│ 14 │      3 │     6 │ (14,3,6) │
└────┴────────┴───────┴──────────┘
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从序列中提取升序子集? 的相关文章

随机推荐

  • Clojure/Scala 互操作?

    我正在尝试与这个简单的 scala 代码进行互操作 但遇到了一些麻烦 package indicators class DoubleRingBuffer val capacity Int 1000 var elements new Arra
  • 故事板的多个入口点

    我需要在启动时在 AppDelegate 中做出一系列决定 根据这些决定的结果 我需要转到故事板的特定部分 所以我的问题是 在不使用任何导航或选项卡控制器的情况下 我如何转到故事板的特定部分 OR 唯一受支持的选项是否具有多个故事板 对于每
  • 如何根据搜索到的字符串过滤列表框中的项目

    我有一个 Windows 窗体应用程序 C 其中包含一个列表框 我在其中添加了一些项目 我没有使用数据源 我想过滤 ListBox 中的项目以仅显示包含我正在搜索的字符串的项目 我通过保留原始项目的列表并在每次搜索字符串更改时从该列表中选择
  • 使用 URL::action() 时如何更改域

    我正在尝试复制 Laravel 3 中可用的内容 我希望能够为路由指定备用域名 例如 我有一条使用此代码生成以下内容的路线 URL action DashboardController something Produces http som
  • 无法转换“AppDelegate Proxy”类型的值

    我已经集成了 Localtyics iOS SDK 之后我收到如下错误 无法转换 LLAppDelegateProxy 类型的值 这意味着我无法获取应用程序委托对象的引用 我现在遇到麻烦了 因为我想要 Localytics 并且还想要 Ap
  • 批处理脚本在文件夹中查找空文件

    我需要识别文件夹中的零 KB 文件并将输出写入文本文件 下面是我使用批处理脚本找到的代码 我想根据我的以下要求进行自定义 echo off set out found txt for r c myfolderfilestosearch F
  • CS0234:System.Web 命名空间中不存在 Mvc

    我根据 Scott Hanselmen Phil Haack 和 Rob Conery 出版的 Professional ASP NET 3 5 MVC 第 13 章 将 ASP net 4 webform 项目转换为 Asp net MV
  • Angular JS:ng-click 范围集在 ng-if 中不起作用

    今天 我看到了 angularjs 中的一个错误 当您尝试直接在 ng click 中设置范围值时 当您的 ng click 位于测试相同范围值的 ng if 中时 它不起作用 gt http jsfiddle net 9j2TL 26 h
  • Android Management API - 使用密码退出 kiosk 模式

    我有问题 我有完全托管的设备并使用 Android Management API https developers google com android management https developers google com andr
  • Jquery 对象选择器作为字符串

    有没有办法获取 jquery 对象的选择器 例如 在 Firefox 中 我看到一个 jquery 对象为 p basket 但 jquery 中似乎没有办法获得这个选择器 有什么办法吗 Phil 如果 jQuery 对象是使用选择器字符串
  • 在 IL 中对空引用调用实例方法

    在 IL 中可以对空引用调用实例方法是否正确 有没有例子可以证明这一点 是的 这是可能的 只要该方法不使用this因为 CLR 不会对以下内容进行空检查call指示 You would have to modify the IL by ha
  • 如何检查我的应用程序是否在 android 中运行(不是作为服务)?

    Problem 我必须检查我的应用程序是否正在运行 当服务已经在后台运行时 基于它 我应该启动特定的活动或应用程序 我尝试或想出但失败的事情我尝试检查当前正在运行的进程 并根据它尝试确定应用程序是否正在运行 失败原因 获取应用程序运行状态一
  • 如何使用 CGImageRef 图像在 NSView 中显示图像

    我想在 NSview 或 NSImageView 中显示图像 在我的头文件中我有 interface FVView NSView NSImageView imageView end 这是我在实现文件中尝试做的事情 void drawRect
  • 将日期时间转换为时间戳并再次转换回来

    我在 Python 中的日期时间方面遇到了一些问题 我尝试将日期时间转换为时间戳 然后再转换回来 无论我如何尝试 最终结果都不一样 我总是以 datetime 2014 1 30 23 59 40 1998 的日期时间结束 import d
  • 使用 REST 是否必须使用适当的方法类型(POST、PUT、GET、DELETE)?

    我们在项目中使用 REST 调用 Web 服务来处理从用户界面进行的所有调用 目前 对于每个方法 签名都是以这种方式配置的 public class SaveNewAddressLabelService GET Consumes appli
  • XSLT 删除任意重复的同级元素

    答案here https stackoverflow com a 16715399 288341正在做我想要的事情 除了我不想只删除特定元素的重复同级元素 我想删除所有元素的重复同级元素 此外 出于我的目的 重复 元素将具有与其同级元素相同
  • Array.map 的 Javascript 性能

    刚刚在 jsperf 中编写了一些测试用例来测试使用时命名函数和匿名函数之间的区别Array map和其他替代方案 http jsperf com map reduce named functions http jsperf com map
  • Flask_migrate 可以在数据库初始化文件中与 sqlAlchemy create_engine 一起运行吗?

    如果我有一个init py 文件如下所示 from sqlalchemy import create engine import os from sqlalchemy orm import sessionmaker scoped sessi
  • CSS3 Internet Explorer 缩放背景过滤器:

    我正在尝试拉伸背景图像 使其始终填充窗口 使用 CSS3 我已经在 mozilla 和 chrome 中管理它 但是在 IE 中却遇到了困难 我以前在 IE 中管理过这个 但这次不起作用 这是我的 HTML 和 CSS HTML5
  • 如何从序列中提取升序子集?

    我有一些数据 id serial 1 1 2 2 3 3 4 1 5 3 6 2 7 1 8 2 9 3 10 1 11 2 12 1 13 2 14 3 我想按 串行 列进行分组 其中组规则是 任何升序子集 像这样 1 gt 2 gt 3