问题标签 [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 回答
2055 浏览

sql - 标记不连续的日期范围

背景(输入)

全球历史气候学网络在其收集的天气测量数据中标记了无效或错误的数据。删除这些元素后,有大量数据不再具有连续的日期部分。数据类似于:

问题(输出)

尽管可以推断缺失数据(例如,通过其他年份的平均值)以提供连续范围,但为了简化系统,我想根据是否有连续的日期范围来填充月份来标记非连续段:

一些测量是在 1843 年进行的。

问题

对于所有气象站,您将如何标记月份中缺少一天或多天的所有天数?

源代码

选择数据的代码类似于:

相关想法

生成一个包含连续日期的表格,并将它们与测量的数据日期进行比较。

更新

可以使用本节中的 SQL 重新创建该问题。

桌子

创建表如下:

生成数据

以下 SQL 将数据插入到表中(id[int]、name [varchar]、date [date]、valid[boolean]):

'A'通过值'F'表示在特定日期进行测量的气象站的名称。

删除随机行

删除一些行如下:

尝试#1

以下不会将valid标志切换到false一个月中缺少一天或多天的所有天:

尝试#2

以下 SQL 生成一个空结果集:

尝试#3

以下 SQL 生成站名和日期的所有可能组合:

然而,在实际数据中,有数百个站点,并且日期可以追溯到 1800 年代中期,因此所有站点的所有日期的笛卡尔坐标都太大。如果有足够的时间,这种方法可能会奏效……必须有更快的方法。

尝试#4

PostgreSQL 有窗口函数。

如何使用 postgres 中的窗口函数选择特定更改

谢谢!

0 投票
7 回答
3912 浏览

sql - 从日期时间表中获取包含开始值和结束值的列表

目前我有一张这样建立的桌子

如您所见,来自具有给定时间戳的设备的一些值(列类型为日期时间)。

问题是设备可以在任何时候启动和停止,并且在数据中没有发生启动或停止的直接信息。但是从给定时间戳的列表中很容易判断何时开始和停止发生,因为只要两行的时间戳在五秒内,它们就属于同一个度量。

现在我想从这些数据中得到一个像这样的列表:

那么有什么想法可以快速做到这一点吗?我所能想到的就是使用某种游标并手动比较每个日期时间对。但我认为这会变得非常慢,因为我们必须检查每一行中的每个值。

那么有没有更好的 SQL 解决方案不适用于游标?

更新

目前我测试了所有给定的答案。通过阅读,它们看起来都很好,并且有一些有趣的方法。不幸的是,所有这些(到目前为止)在真实数据上都失败了。最大的问题似乎是数据的海量(目前它们在表中大约有 350 万个条目)。仅对一小部分子集执行给定查询会导致预期结果,但将查询滚动到整个表只会导致非常糟糕的性能。

我必须进一步测试和检查我是否可以将数据分块,并且只将部分数据传递给这些给定算法之一以使这件事滚动起来。但也许你们中的一个人有另一个聪明的想法,可以更快地获得结果。

更新(有关结构的更多信息)

好的,这些信息也可能有所帮助:目前表中大约有 350 万个条目。以下是给定的列类型和索引:

  • _ID
    • 整数
    • 首要的关键
    • 分组索引
    • 在我的示例中没有提到此列,因为此查询不需要它
  • 设备ID
    • 整数
    • 不为空
    • 指数
  • 时间戳
    • 约会时间
    • 不为空
    • 指数
  • 价值
    • 几个不同类型的未索引列(int、real、tinyint)
    • 都可以为空

也许这有助于改进您对给定问题的已有(或新)解决方案。

0 投票
2 回答
3575 浏览

sql - 按时间段查询记录和分组

我有一个可能一天运行几次的应用程序。每次运行都会将数据写入表中以报告发生的事件。主报告表如下所示:

我可以说有两次运行,但我想要一种能够查询日期范围的方法,即进程运行的次数。我想要一个查询,结果是进程开始的时间和组中的文件数。这种查询让我得到了我想要的东西,我可以看到运行的日期和时间以及运行了多少文件,但不完全是我想要的。例如,它不适合从 8:58 到 9:04 的跑步。例如,它还会对从 9:02 和 9:15 开始的跑步进行分组。

我知道任何靠近的跑步都可能会被组合在一起,我对此很好。我只希望得到一个粗略的分组。

谢谢!

0 投票
2 回答
158 浏览

sql - 需要帮助找到正确的 T-SQL 查询

我不太确定如何去做。基本上我有一张这样的桌子

其中基本上包含员工要求休假的天数。现在,当一天或几天被授予时,需要将此数据复制到表格的表格中

所以基本上对于我想要的上述数据:

即我想要DateFrom 和DateTo 中的连续天数。现在我不确定如何在不使用 while 循环的情况下执行此操作。这是 SQL,所以我更喜欢非迭代解决方案。

请指教!!!

0 投票
4 回答
207 浏览

sql - 删除重复后的行

我有一个用户登录和注销戳列表。不幸的是,LOGIN 条目可能并不总是后跟 LOGOUT 条目。当[event_date]排序时,
我希望删除与前一行具有相同[event][user_id]的任何行 有关如何执行此操作的任何建议?

示例表

0 投票
1 回答
295 浏览

sql - SQL - 在计划中查找开放空间

我正在使用 SQLite 数据库,并且我有三个描述建筑物、房间和预定事件的表。

表格如下所示:

  • 建筑物(ID,名称)
  • 房间(ID,BuildingID,Number)
  • 事件(ID、BuildingID、RoomID、Days、s_time、e_time)

因此,每个事件都与建筑物和房间相关联。Days 列包含一个整数,它是对应于星期几的素数的乘积(值 21 表示事件发生在星期二 = 3 和星期四 = 7)。

我希望找到一种方法来生成特定建筑物中的房间报告,该报告将在接下来的几个小时内开放,以及它们将开放多长时间。

这是我到目前为止所拥有的:

在这里,我找到特定建筑物的所有房间,然后删除当前正在进行预定活动的房间。

我期待所有有用的提示/评论。

0 投票
2 回答
419 浏览

sql - SQL 组范围值

我在这里查看了其他几个问题/答案,但我无法将它们应用于我的问题。我正在尝试根据键列识别多个连续中断。我发现的大多数示例都没有处理同一键列的序列中的多个中断。

0 投票
5 回答
13412 浏览

mysql - MySQL:查找日期范围之间的缺失日期

我需要一些有关 mysql 查询的帮助。我有一个 db 表,其中包含 2011 年 1 月 1 日至 2011 年 4 月 30 日的数据。每个日期都应该有记录。我需要找出表格中是否缺少任何日期。

例如,假设 2011 年 2 月 2 日没有数据。我如何找到那个日期?

我将日期存储在名为 reportdatetime 的列中。日期的存储格式为:2011-05-10 0:00:00,即 2011 年 5 月 5 日凌晨 12:00:00。

有什么建议么?

0 投票
2 回答
2538 浏览

sql - 如何在Sql Server 的相邻记录中找到具有相同值的记录?(我相信这个的正确术语是一个地区??)

查找具有相同值的相邻记录的开始和结束时间?

我有一个表格,其中包含心率读数(以每分钟节拍为单位)和日期时间字段。(实际上字段是heartrate_idheartratedatetime。)数据由每 6 秒记录一次心率和时间的设备生成。有时心率监测器会给出错误的读数,并且记录的每分钟心跳数会“粘住”一段时间。棒,我的意思是每分钟的节拍值在相邻的时间里是相同的。

基本上,我需要找到所有心率相同的记录(例如每分钟 5 次、每分钟 100 次等),但仅在相邻记录上。如果设备记录 3 次连续读数(或 100 次连续读数)每分钟 25 次心跳,我需要定位这些事件。结果需要有心率、心率开始时间和心率结束时间,理想情况下,结果看起来更像这样:

我已经尝试了几种不同的方法,但到目前为止我正在脱颖而出。任何帮助将不胜感激!

0 投票
1 回答
159 浏览

sql - 如何确定给定标准的连续范围的大小?

我在 SQL Server 2008R2 中有一个职位表(定义如下)。

在系统框中有位置。

我需要找到一个盒子,里面还有 X 个空闲位置。但是,X 位置必须是连续的(从左到右,从上到下,即升序的 PositionID)。

构造一个查找具有 X 个空闲位置的框的查询很简单。我现在有确定位置是否连续的问题。

关于基于 TSQL 的解决方案的任何建议?

表定义

编辑

http://pastebin.com/V8DLiucN - pastebin 链接与 1 个盒子的样本位置(样本数据中的所有位置都是空的)

编辑 2

“空闲”位置是 SampleID = null