【发布时间】:2022-01-10 11:43:44
【问题描述】:
似乎“差距和孤岛”这个词在我的工作场所被过度使用了。我最近在该旗帜下基本上遇到了以下问题。
获取一组包含许多行的数据,每行包含大量数据,但特别是始终包含开始和停止时间列,并包含许多其他列,如果其中一个不为 NULL,则其他列是。例如:
Start Time Stop Time Drunkenness Programming Ability 01 60 0100 NULL 10 20 NULL 0450 40 50 NULL 0250 (您也可以使用明显的未透视等价物,但不要担心)
并将该数据转换为所有数据都折叠的形式,以便您只需查看与该时间段相对应的单行,即可在任何给定时间找出真实情况。因此,对于前面的示例,您需要这样:
Start Time Stop Time Drunkenness Programming Ability 01 09 0100 NULL 10 20 0100 0450 21 39 0100 NULL 40 50 0100 0250 51 60 0100 NULL 要查看这是您真正想要的,请查看原始行中的时间。直到时间 10,只给出了“Dunkenness=0100”,所以我们在结果中的第一行必须从 01 到 09 并且只包含 Drunkenness 信息。原始表中的下一行从 10 到 20,因此我们必须在结果中包含该时间段的一行,并且它必须包含当时正确的任何信息(即始终正确的“Drunkenness=0100”以及仅在 10 到 20 次之间为真的“编程能力 = 0450”)。由于从时间 21 到 39 未定义“编程能力”,我们必须还有另一行为 NULL。然后其他两行由与前几行相同的过程生成,因此我们得到了上表。
这真的是一个“差距和孤岛”问题吗?还是文献给了它一个不同的名字?我同意第一个数据集中存在差距,并且最终数据集中的结果被分成岛屿,但这似乎不是文献的内容指的是当它谈到“差距和岛屿”问题时。文献似乎关心的是寻找差距或寻找岛屿,而不是像这样将差距变成岛屿并合并数据。
使用 SQL 标记是因为这是一个关系数据库。我不是在寻求解决方案,我怀疑在您的答案中包含 SQL 解决方案会很有启发性,尽管他们会受到欢迎。因此,我没有在这个问题中包含任何 SQL 代码。
我不认为这个问题是基于意见的。我已经看过足够多的关于差距和孤岛问题的报道,我相信在某处必须对它们进行正式定义。 强烈建议您提供这些问题的正式定义及其来源。如果这不是间隙和孤岛问题,而实际上是其他问题,那么请给出一个名称和来源定义。
【问题讨论】:
-
我认为你需要解释一下我们从输入表到输出的逻辑。从长远来看,这似乎不是一个空白和孤岛问题。
-
我还是不明白,但这看起来不像是缝隙和孤岛。
-
嗨 - 我想知道你为什么关心它叫什么?对它应用标签有什么好处?另外,就像仅供参考一样,没有人会设计这样的表:除了一个属性列之外的所有属性列始终为空(假设属性的数量不小)跨度>
-
@NickW 有两个好处:1) 知道这个名字可以帮助我查找它;2) 知道它不是间隙和孤岛,这样我就可以节省时间,因为我会像对待它一样对待它。是。至于表格设计,这是由于连接而不是那样设计的结果。
-
显然只是我的看法,但鉴于此论坛的目的是帮助人们解决问题,描述您面临的问题并寻求帮助解决问题不是更有效率吗?而不是要求人们对其进行分类?即使有人确实说它是或不是“差距和孤岛”问题,您也无法知道它们是否正确,并且它使您无法解决您可能遇到的任何问题面对。事实上,如果他们说这是一个“g&i”问题并且是错误的,那么您将浪费时间寻找不适用的解决方案
标签: sql language-agnostic relational-database terminology gaps-and-islands