返回年份数组作为年份范围

2024-05-14

我正在尝试查询一个包含以下内容的表character varying[]年份列,并将这些年份作为逗号分隔的年份范围字符串返回。年份范围将由数组中存在的连续年份确定,不连续的年份/年份范围应以逗号分隔。

数据类型的原因是character varying[]而不是integer[]是因为一些值包含ALL而不是年份列表。我们可以忽略这些结果。

到目前为止,我在解决这个问题方面运气不佳,因为我什至不知道从哪里开始。

有人能给我一些指导或提供一个有用的例子来说明如何解决诸如挑战之类的问题吗?

years_table Example

+=========+============================+
| id      | years                      |
| integer | character varying[]        |
+=========+============================+
| 1       | {ALL}                      |
| 2       | {1999,2000,2010,2011,2012} |
| 3       | {1990,1991,2007}           |
+---------+----------------------------+

产出目标:

SQL 查询示例:

SELECT id, [year concat logic] AS year_ranges
FROM years_table WHERE 'ALL' NOT IN years

Result:

+====+======================+
| id | year_ranges          |
+====+======================+
| 2  | 1999-2000, 2010-2012 |
| 3  | 1990-1991, 2007      |
+----+----------------------+

SELECT id, string_agg(year_range, ', ') AS year_ranges
FROM (
   SELECT id, CASE WHEN count(*) > 1
               THEN min(year)::text || '-' ||  max(year)::text 
               ELSE min(year)::text
              END AS year_range
   FROM  (
      SELECT *, row_number() OVER (ORDER BY id, year) - year AS grp
      FROM  (
         SELECT id, unnest(years) AS year
         FROM  (VALUES (2::int, '{1999,2000,2010,2011,2012}'::int[])
                      ,(3,      '{1990,1991,2007}')
               ) AS tbl(id, years)
         ) sub1
      ) sub2
   GROUP  BY id, grp
   ORDER  BY id, min(year)
   ) sub3
GROUP  BY id
ORDER  BY id

生产exactly想要的结果。

如果你处理一个 varchar 数组 (varchar[],只需将其投射到int[],然后再继续。这似乎是完全合法的形式:

years::int[]

将内部子选择替换为生产代码中源表的名称。

 FROM  (VALUES (2::int, '{1999,2000,2010,2011,2012}'::int[])
              ,(3,      '{1990,1991,2007}')
       ) AS tbl(id, years)

->

FROM  tbl

由于我们正在处理一个自然递增数(年份)我们可以使用快捷方式来形成连续年份的组(形成一个范围)。我从行号中减去年份本身(按年份排序)。对于连续年份,行号和年份都加一并产生相同的结果grp数字。否则,一个新的范围开始。

More on 窗函数在手册中here http://www.postgresql.org/docs/current/interactive/tutorial-window.html and here http://www.postgresql.org/docs/current/interactive/functions-window.html.

在这种情况下,plpgsql 函数可能会更快。你必须进行测试。这些相关答案中的示例:
连续重复/重复的有序计数 https://stackoverflow.com/questions/13078964/ordered-count-of-consecutive-repeats-duplicates/13079901#13079901
ROW_NUMBER() 显示意外值 https://stackoverflow.com/questions/11819251/row-number-shows-unexpected-values/11821003#11821003

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回年份数组作为年份范围 的相关文章

  • 针对 SQL Server 的 SQL 查询的执行日期时间

    我曾经发现过这个很好的查询here https dba stackexchange com a 135080 43889 我想将查询的执行时间添加到以下查询中 USE master go SELECT sdest DatabaseName
  • MySQL 错误 1264:列的值超出范围

    As I SETMySQL 中的 cust fax 表如下所示 cust fax integer 10 NOT NULL 然后我插入这样的值 INSERT INTO database values 3172978990 但随后它说 错误 1
  • 创建并初始化具有连续名称的类的实例

    我有一个BankAccount班级 我试图创建这个类的多个实例并将它们放入一个数组中 例如 accounts Ba1 BankAccount new 100 Ba2 BankAccount new 100 我想初始化包含大量实例的数组 假设
  • 为什么数组不符合 Equatable,而它的项在 Swift 中是 Equatable?

    UPDATE 从 Xcode 9 3 开始 包括斯威夫特 4 1 数组相等按预期工作 并且原始问题中的代码编译没有错误 然而 请查看已接受的答案 因为它提供了更好 更现代的解决方案 原问题如下 当我尝试声明类型为泛型枚举的实例时 Post
  • mysql 中的 max(长度(字段))

    如果我说 select max length Name from my table 我得到的结果是 18 但我也想要相关数据 所以如果我说 select max length Name Name from my table 这是行不通的 我
  • 如何设置 ssrs 报告上日期和时间的格式?

    在 SSRS 报告中我需要显示todays date and current time 我试过这个 FormatDateTime Now MM dd yyyy hh mm tt 但这对我来说不起作用 给出了错误 任何人请帮助我express
  • Sails.js + Postgres:交易问题

    我试图使用 Postgres 作为数据库在 Sails 0 10 5 中实现事务 但操作最终没有提交 或回滚 这是我作为测试写下的一个简单的事务场景 使用 async js testTransaction function uri var
  • VBScript从txt文件中读取多个文件名并列出目录中不存在的文件名

    我是 VB 脚本编写的新手 我试图找到一种方法 读取以文本行形式写入特定文本文件内的文件名列表 检查这些文件是否与脚本位于同一目录中 将不存在的文件名写入输出文件 missing txt 根据我的研究 似乎一个好的方法是使用 FSO 并读取
  • 从 PHP 中的平面路径数组构建目录树

    所以 标题可能令人困惑 但我不知道如何表达这种数组结构 它肯定是一个树结构 但至于它的创建 这正是我所渴望的 它似乎不遵循典型的递归数组树构建 我正在尝试从平面路径数组创建列目录布局 每个路径都位于其自己的多维数组内 该数组旨在构建 mac
  • C++11 中 std::array 大小为零是否有原因?

    考虑以下代码 C 11 编译器完全可以接受它 include
  • LINQ to Entities 无法识别“System.String ToString()”方法,并且该方法无法转换为存储表达式

    我正在将一些内容从一台 mysql 服务器迁移到一台 sql 服务器 但我不知道如何使这段代码工作 using var context new Context foreach var item in collection IQueryabl
  • ORACLE SQL 中的 MAX()

    我有一个表 存储已完成的维护任务的记录列表以及完成的日期和时间 我正在尝试执行子查询来提取具有最新日期的每个任务的记录 我的SQL语句是 SELECT ENGINEERING COMPLIANCE EO AS EO ENGINEERING
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • 在 Bash 中将命令的输出读取到数组中

    我需要将脚本中命令的输出读取到数组中 该命令例如是 ps aux grep grep x 它逐行给出输出 如下所示 10 20 30 我需要将命令输出中的值读入一个数组 然后如果数组的大小小于三 我将做一些工作 如果命令的输出包含空格 相当
  • 在 Android 中将图像从可绘制图像转换为字节数组

    由于我要将图像发送到 Parse com 因此我必须将其转换为字节数组 我的第一种方法是从图库中选择图像并将其转换为字节数组 如下所示 Override protected void onActivityResult int request
  • 为什么循环引导迭代算法的数组大小必须为 3^k+1?

    The 循环引导迭代算法 http www geeksforgeeks org an in place algorithm for string transformation 是一种通过将所有偶数项移至前面并将所有奇数项移至后面同时保留其相
  • 如何在oracle sql查询中提取括号之间的字符串

    我正在尝试从字符串中提取括号之间的值 我怎样才能做到这一点 例如 我有这个字符串 Gupta Abha 01792 我想得到括号之间的结果 即 01792 我正在尝试编写这样的查询 select substr Gupta Abha 0179
  • 使用 min(datetime) 了解 SQL Server 行为

    长话短说 这只是我的一个愚蠢的假设 我确信一个专栏是一个日期时间 但它不是 所以不要指望在这个问题中找到任何有趣的东西 把它留在这里 以便民主党得到他的正确接受回答 我写了一个像这样的简单查询 SELECT ID MIN DateMadeA
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • PHP/MySQL - 在数据库中存储数组

    我正在开发一个 PHP 应用程序 它需要将各种设置存储在数据库中 客户经常询问是否可以添加或更改 删除某些内容 这导致了表格设计出现问题 基本上 我有很多布尔字段 它们只是指示是否为特定记录启用了各种设置 为了避免再弄乱表格 我正在考虑将数

随机推荐

  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup
  • 延迟图像下载完成后更新 UITableViewCell

    异步下载单元格图像后 我在更新 UITableViewCells 时遇到一些问题 我正在使用自定义 UITableViewCells 如下所示 UITableViewCell tableView UITableView tableView
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • 无法在 GCP Cloud Scheduler 上创建作业

    当我尝试在 GCP Cloud Scheduler 中创建作业时 出现以下错误 error code 7 message 主体 用户或服务帐户 缺少资源 我的服务帐户 的 IAM 权限 iam serviceAccounts actAs 或
  • CSS 动画自定义属性/变量

    一段时间以来我一直在努力让它发挥作用 关键是内部 div 将具有某种形状 并且可能会不止一个 这就是为什么我使用nth child选择器 这个内部 div 应该显示然后再次隐藏一段时间 问题是 我想在一个动画中为所有 后来的 多个内部 di
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 是否有关于 EML 文件格式的 RFC?

    基本上 我正在尝试使用 EML 文件 我想知道这些文件在不同的电子邮件服务器上是否相当标准 基本上 EML 文件上是否有一个 RFC 就像电子邮件地址和其他主题的 RFC 一样 我想我可以更具体一点 以便更好地了解我需要什么 我正在扫描 E
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 在 Clojure 和其他 Lisp 方言中,在函数名称末尾使用星号的约定是什么?

    请注意 我不是在谈论符号名称中的耳罩 这个问题在Clojure 常量的约定 样式和用法 https stackoverflow com questions 3579063 conventions style and usage for cl
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • Shiny可以识别用鼠标选择的文本(突出显示的文本)吗?

    我需要用户将文本片段分配给 Shiny 中的类别或 代码 基本上 我希望用户突出显示输出中的文本 在下面的示例中 来自table or text输出 然后按一个按钮 code 并将选定的文本分配给应用程序内的对象 在下面的应用程序中 所选文
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 如何设置仅适用于 iPhone 或 iPad 的视口?

    我有一个网站 需要在 iphone 上使用 0 3 的视口值 但在 ipad 上使用 0 7 有没有办法只为 iPhone 或 iPad 设置视口 这是一种解决方案
  • 模拟节点外部模块默认使用 jest 的链式方法

    在我们的节点 CLI 中 我们有一个简单的方法 use strict const ora require ora module exports function startSpinner textOnStart color spinnerT
  • 媒体查询:如何定位桌面、平板电脑和移动设备?

    我一直在对媒体查询进行一些研究 但我仍然不太明白如何定位特定大小的设备 我希望能够针对台式机 平板电脑和移动设备 我知道会存在一些差异 但如果有一个可用于针对这些设备的通用系统 那就太好了 我发现的一些例子 Mobile only scre
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var