问题标签 [gaps-and-islands]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5820 浏览

sql - GROUP BY 和聚合顺序数值

使用 PostgreSQL 9.0。

假设我有一个包含以下字段的表companyprofessionyear。我想返回一个包含独特公司和专业的结果,但基于数字序列聚合(到一个数组中很好)年份:

示例表:

我对将输出类似于以下行的查询感兴趣:

基本特征是只能将连续年份组合在一起。

0 投票
2 回答
1420 浏览

mysql - 填补Mysql查询中时间序列空白的最佳方法

我需要填补一个mysql查询结果集的时间序列的空白。我正在测试使用包含时间序列的所有数据点的辅助表进行外部联接的选项(如本线程所示:如何填补 MySQL 中的日期空白?)。

我遇到的问题是添加此连接会显着增加查询响应时间(从 1 秒以下到 90 秒)。

这是原始查询:

这是添加了辅助表(month_fill)的外部连接的查询:

我可以重组查询以提高性能是否有替代解决方案来实现我正在寻找的东西?

11/15 更新:

这是第一个查询的 EXPLAIN 输出:

这是第二个查询的 EXPLAIN 输出:

0 投票
2 回答
385 浏览

mysql - 需要来自 MySql 数据库的日期块数组

好的,我有一个包含 StartDate 和 EndDate 的行的数据库表。我需要做的是从中返回消耗的时间块。

因此,例如,如果我有 3 行,如下所示:

那么使用的时间块如下:

2011-01-01 至 2011-02-20 和 2011-03-01 至 2011-04-01

有没有从 MySql 数据库中提取它的简单方法?欢迎任何建议!

0 投票
4 回答
157 浏览

mysql - 过滤掉孤立表条目

假设有一个只有两列的表(示例如下所示)。每个 '1' 条目后(按照下面给出的排序顺序)应该跟一个 '0'。但是,如您所见,在表中,有一些“孤儿”,其中有两个连续的“1”。

如何创建一个返回所有行的查询,除了任何连续的“1”中的第一个?(这会将下面的示例从 16 行减少到 14 行)


我将尝试澄清我的问题,我认为上面我简化了太多。想象一张名为 的表logs,有四列:

  • user(包含用户名的字符串)
  • machine(唯一标识各种 PC 的字符串)
  • type(事件类型:1 表示登录0表示注销)
  • time(记录事件的时间)

[机器/时间对提供唯一的密钥,因为任何机器都不能同时登录或退出两次。如果需要,可以根据机器/时间排序人为地创建一个“ID”列。]

这个想法是每个登录事件都应该伴随一个注销事件。用理想的话来说,将登录与注销相匹配是相当容易的,因此可以分析登录所花费的时间。

但是,在断电的情况下,不会记录注销。因此(仅考虑一台机器的数据,按时间排序)如果连续有两个登录事件,我们希望忽略第一次登录,因为我们没有任何可靠的数据。这是我试图解决的问题。

0 投票
3 回答
854 浏览

sql - 在 Postgres 中查询连续列的“运行”

我有一张桌子:

我想构造一个语句,给定一个事件可以返回从该事件开始的事件“运行”的长度。运行定义为:

  1. 如果两个事件的间隔在 30 秒内,则两个事件一起运行。
  2. 如果A和B一起跑,B和C一起跑,那么A和C一起跑。

但是我的查询不需要及时倒退,所以如果我在事件 2 上进行选择,那么只有事件 2、3 和 4 应计为以 2 开头的事件运行的一部分,并且应返回 3 作为运行的长度。

有任何想法吗?我难住了。

0 投票
4 回答
353 浏览

sql - SQL 需要从列中返回范围

我有一个表,其中有一个名为 ID 的整数列,其值可能有间隙(例如 1、2、3、4、7、8、10、14、15、16、20)

我想找到一个查询,在上面的示例中,结果如下:

1-4 7-8 10 14-16 20

= 更新 =

感谢下面的代码(它似乎在 SQL Server 中运行良好),我觉得我非常接近让它在 MS-Access 中运行,这是目标。尽管在我的陈述中我仍然遇到语法错误,但我无法弄清楚......

选择值从(

) as tbl ORDER BY PORTID ASC

0 投票
6 回答
9566 浏览

sql - SQL - 在大多数有序序列中查找缺失的 int 值

我管理一个基于消息的系统,其中一系列唯一整数 ID 将在一天结束时完全表示,尽管它们不一定按顺序到达。

我正在寻找使用 SQL 查找本系列中缺少的 id 的帮助。如果我的列值如下所示,在这种情况下,如何找到我在这个序列中缺少的 id 6

该序列将在每天的任意点开始和结束,因此每次运行时 min 和 max 会有所不同。来自 Perl 背景,我通过那里的一些正则表达式。

帮助将不胜感激。

编辑:我们运行 oracle

编辑2:谢谢大家。下周我将在办公室介绍您的解决方案。

Edit3:我暂时解决了以下问题,ORIG_ID 是原始 id 列,MY_TABLE 是源表。在仔细查看我的数据时,除了字符串中的数字数据之外,还有多种情况。在某些情况下,存在非数字字符的前缀或后缀。在其他情况下,数字 id 中混有破折号或空格。除此之外,id 会定期出现多次,所以我包括了 distinct。

我将不胜感激任何进一步的输入,特别是关于去除非数字字符的最佳途径。

0 投票
2 回答
161 浏览

sql - “插槽”取决于用户 ID 等 sql

我有一张这样的桌子

id 项目用户槽

我希望 SLOT 依赖于用户 ID。

如果我有 4 列

如果我添加一个新项目,它应该自动被赋予插槽 5。但是如果我首先,比如说,删除(插槽 2 或将其移动到另一个插槽,新项目应该获得插槽号 2。这可以用 SQL 吗?

插槽基本上是放置“项目”行的位置。

清单如下所示:

其中数字 1-20 是插槽。如果,假设上面的 4 个插槽被项目占用,则下一个项目应分配 5。但如果我将一个项目(如插槽 2)移动到插槽 20,则下一个项目应放置在数字 2 上,因为它现在没有采取。如果 3-4 都被删除,然后添加了一个项目,它将被放置在 3 处。

0 投票
4 回答
3920 浏览

mysql - 如何在 MySQL 记录集中找到 ID 间隙?

这里的问题与我遇到的另一个问题有关...

我有数百万条记录,每条记录的 ID 都是自动递增的,不幸的是,有时生成的 ID 有时会被丢弃,因此 ID 之间有很多差距。

我想找到差距,并重新使用被遗弃的 id。

在 MySQL 中执行此操作的有效方法是什么?

0 投票
1 回答
301 浏览

sql-server - 基于时间列表中的序列岛的交叉表行

只是写问题标题伤了我的头!

请多多包涵!请参阅以下 DDL 和虚拟数据:

现在,我需要如下渲染虚拟数据:

如您所见,我需要将岛的开始时间和结束时间提取为单独的列,注意根据分支、日期和条目计数来拆分岛。当您处理简单的数字序列时,我已经看到了巧妙的解决方案 - 但我无法让它们适应这种情况。我很想看看你们会如何处理这个问题。

我正在使用 SQL Server 2008+

显示 Island boundres 的屏幕截图,可能是因为分支更改、日期或计数

在此处输入图像描述