小编sha*_*t00的帖子

表达式或谓词的顺序对使用ANSI联接的标准SQL中的外部联接的联接条件是否有任何影响?

采取典型的左外部联接方案。我们都知道表的顺序非常重要,例如Q1Q2不相等:

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中的外部联接的联接条件是否有任何影响?

sql

3
推荐指数
1
解决办法
223
查看次数

检测时间戳列中超过 30 分钟的间隙

我已经阅读并尝试使用一系列间隙和孤岛检测的标准方法,但没有成功,因为我需要能够忽略任何小于 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)

sql t-sql sql-server sql-server-2008

-1
推荐指数
1
解决办法
1429
查看次数

标签 统计

sql ×2

sql-server ×1

sql-server-2008 ×1

t-sql ×1