Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 由于ORDERBY子句,Partition By子句给出不同的结果_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 由于ORDERBY子句,Partition By子句给出不同的结果

Sql 由于ORDERBY子句,Partition By子句给出不同的结果,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在尝试对示例数据运行分区查询。如果我删除ORDER BY子句,它会给我不同的结果。产生不同结果的原因是什么。请检查下面的链接 对于通常对排序不敏感的聚合(min、max、stdev等),如果在OVER()子句中有order by,它将成为一个正在运行的小计。关于更彻底的治疗,请参见贾斯汀·凯夫对以下问题的回答 编辑 这里指的是sqlfiddle: 第一个查询: SELECT B1.ST , B1.ET , MAX(B1.ET) OVER(PARTITION BY B

我正在尝试对示例数据运行分区查询。如果我删除ORDER BY子句,它会给我不同的结果。产生不同结果的原因是什么。请检查下面的链接


对于通常对排序不敏感的聚合(min、max、stdev等),如果在OVER()子句中有order by,它将成为一个正在运行的小计。关于更彻底的治疗,请参见贾斯汀·凯夫对以下问题的回答

编辑

这里指的是sqlfiddle:

第一个查询:

SELECT B1.ST
  , B1.ET
  , MAX(B1.ET) 
    OVER(PARTITION BY B1.MAS_DIV_KEY
             ,B1.STN_KEY
             ,B1.SBSC_GUID_KEY 
         ORDER BY B1.ST
         ) AS TEST_COL
FROM AM_PROGRAM_TUNING_EVENT_TMP1 B1
ORDER BY B1.ST;
。。。返回

ST                            ET                            TEST_COL
March, 28 2012 11:00:00-0700  March, 28 2012 11:05:00-0700  March, 28 2012 11:05:00-0700
March, 28 2012 11:03:00-0700  March, 28 2012 11:15:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:03:00-0700  March, 28 2012 11:50:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:10:00-0700  March, 28 2012 11:30:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:20:00-0700  March, 28 2012 11:50:00-0700  March, 28 2012 11:50:00-0700
让我们来分析一下。。。第一行是一个不同的ST,因此到该点的最大值是该行中的任何值。下一行,ST不是唯一的。因此,到该点为止,所有行的最大值不是11:15,而是ST 11:03的两行的最大值都是11:50。最后两行在11:50之后没有ET,所以这就是我们为所有剩余行显示的内容。我们在OVER子句中使用了ORDER BY,所以这就是我们告诉Oracle要做的

甲骨文说:


如果您了解范围是如何工作的,那么您应该清楚为什么会看到这样的结果。

在您的查询中,您在哪里使用了
ORDER BY
?哪个查询?护目镜;他们什么都不做…让我把问题贴在这里…我看不出有什么不同results@Lamak请参见-第一个查询中的第一条记录是11:05;其余的记录是11:50,正如arturro指出的那样,分析函数的默认范围将是根据排序方式排序的所有前几行中有问题的行。如果在无界前导和无界后继之间添加范围,则应获得与没有ORDER BY时相同的结果。
ST                            ET                            TEST_COL
March, 28 2012 11:00:00-0700  March, 28 2012 11:05:00-0700  March, 28 2012 11:05:00-0700
March, 28 2012 11:03:00-0700  March, 28 2012 11:15:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:03:00-0700  March, 28 2012 11:50:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:10:00-0700  March, 28 2012 11:30:00-0700  March, 28 2012 11:50:00-0700
March, 28 2012 11:20:00-0700  March, 28 2012 11:50:00-0700  March, 28 2012 11:50:00-0700
*If you omit the windowing_clause entirely, then the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.*