在研究Oracle Analytics时,我遇到了这个问题:
select an_id,
a_date,
min(a_date) over (
partition by an_id, trunc(a_date)
order by a_date
range between (2.5/24) preceding and (2.5/24) following
) mn,
max(a_date) over (
partition by an_id, trunc(a_date)
order by a_date
range between (2.5/24) preceding and (2.5/24) following
) mx
from a_table
我相信这会在2.5小时内找到给定an_id
和a_date
的最短和最长日期。
我的问题是为什么a_date
(日期)和2.5/24
(数字)之间的比较有效,以及如何针对天,月或年的范围进行修改?
答案 0 :(得分:2)
日期类型允许算术,其中1的单位是一天,所以明天是SYSDATE + 1.
例如,尝试从双重选择to_char(sysdate + 1/24,'DD-MON-YY HH:MM:SS') - >从现在起1小时。
答案 1 :(得分:2)
以下是讨论该特定分析结构的文档,以提供一些基本信息,并添加到jwilson提到的内容中。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions001.htm#i97640
答案 2 :(得分:2)
使用间隔来指定窗口范围可能更清楚:
http://download.oracle.com/docs/cd/B19306%5F01/server.102/b14200/functions104.htm#i89943
SELECT last_name,
hire_date,
salary,
SUM(salary) OVER (ORDER BY hire_date
RANGE NUMTOYMINTERVAL(1,'year') PRECEDING) AS t_sal
FROM employees;