采取典型的左外部联接方案。我们都知道表的顺序非常重要,例如Q1和Q2不相等:
SELECT A.x, B.y FROM A LEFT OUTER JOIN B ON A.id = B.id -- (Q1)
SELECT A.x, B.y FROM B LEFT OUTER JOIN A ON B.id = A.id -- (Q2)
Run Code Online (Sandbox Code Playgroud)
当我从概念上考虑多个联接时,对我来说通常可以想象将新表选为感兴趣的对象,然后描述其表行与之前的内容之间的关系。保持术语并行对我没有任何好处,按照我自己的习惯,我通常以这种方式编写连接条件:
SELECT A.x, B.y FROM A LEFT OUTER JOIN B ON B.id = A.id -- (Q3)
Run Code Online (Sandbox Code Playgroud)
我与一位前同事交谈,后者误解了语法的工作原理。对于这个同事来说,第三季度是错误的,第一季度是正确的。而且我确实意识到,使用老式的外部联接语法很重要,这很可能是造成混淆的原因。我从未听说过或看到其他人使用ANSI联接进行这种情况。请回答此问题并兑现我的声誉,指出我忽略的问题,或者对错误的观点提供更深入的了解。
表达式或谓词的顺序对使用ANSI联接的标准SQL中的外部联接的联接条件是否有任何影响?
我已经阅读并尝试使用一系列间隙和孤岛检测的标准方法,但没有成功,因为我需要能够忽略任何小于 30 分钟的间隙。由于性能问题,我无法使用游标。
每当有至少 30 分钟的间隙时,我都需要一个包含开始和结束的新行。如果没有至少 30 的间隙,结果将是包含时间戳最小值和最大值的一行。如果有 1 个间隙至少为 30,则将有 2 行 - 从系列的开头到间隙以及从间隙到结束。如果有更多间隙,我们会获取间隙之间每个间隔的行,等等。
输入:
timestamp
2015-07-15 15:01:21
2015-07-15 15:17:44
2015-07-15 15:17:53
2015-07-15 15:18:34
2015-07-15 15:21:41
2015-07-15 15:58:12
2015-07-15 15:59:12
2015-07-15 16:05:12
2015-07-15 17:02:12
Run Code Online (Sandbox Code Playgroud)
期望的输出:
from | to
2015-07-15 15:01:21 | 2015-07-15 15:21:41
2015-07-15 15:58:12 | 2015-07-15 16:05:12
2015-07-15 17:02:12 | 2015-07-15 17:02:12
Run Code Online (Sandbox Code Playgroud)