【发布时间】:2018-09-08 07:45:25
【问题描述】:
以下查询给出了奇怪的结果。看起来 FIRST_VALUE 的默认窗口始终是 UNBOUNDED PRECEDING 和 UNBOUNDED FOLLOWING,而 LAST_VALUE 的默认窗口类似于 CURRENT_ROW 和 CURRENT_ROW。这是为什么呢?
select
to_char(INVOICEDATE,'iw') WEEK,
SUM(total) AS TOTAL_SUM,
FIRST_VALUE(to_char(INVOICEDATE,'iw')) OVER (order by SUM(total)) minimum,
FIRST_VALUE(to_char(INVOICEDATE,'iw')) OVER (order by SUM(total) DESC) maximum,
LAST_VALUE(to_char(INVOICEDATE,'iw')) OVER (order by SUM(total)) max_2,
LAST_VALUE(to_char(INVOICEDATE,'iw')) OVER (order by SUM(total) ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) max_3
from invoice
WHERE to_char(INVOICEDATE,'iw') < 9
group by to_char(INVOICEDATE,'iw')
order by to_char(INVOICEDATE,'iw')
结果如下:
【问题讨论】:
-
BETWEEN CURRENT_ROW AND CURRENT_ROW将是只是当前行,我不认为是这种情况。 -
是的,但是“max_2”的行为方式是这样的..
-
检查documentation:如果您完全省略了windowing_clause,则默认为RANGE BETWEEN UNBoundED PRECEDING AND CURRENT ROW。
-
请不要以图片形式提供结果,以文字形式提供。此外,如果没有您的源数据,也很难为您提供帮助。
-
但如果是这样,为什么两个 FIRST_VALUE 对所有行都显示相同的结果?每个 LAST_VALUE 都不一样,抱歉,我不明白 :)