我試圖通過以前的行窗口獲取最大日期。值得注意的是日期的實際時間部分。帶日期窗口保留時間的MAX分析函數
實際的表包含大量更多日期的數據,但查詢駐留在函數中,該函數將日期作爲參數將數據限制爲一天。
+---------------------------------------------------------------------+
¦FROM ¦ TO ¦ GRAPH ¦
+------+-------+------------------------------------------------------¦
¦09:00 ¦ 11:00 ¦ [--------] ¦
¦10:00 ¦ 10:30 ¦ [-] ¦
¦10:45 ¦ 12:00 ¦ [-------] ¦
¦13:00 ¦ 14:30 ¦ [--------] ¦
¦14:00 ¦ 15:00 ¦ [-----] ¦
¦15:30 ¦ 16:30 ¦ [----] ¦
¦16:30 ¦ 17:30 ¦ [-----] ¦
+---------------------------------------------------------------------+
-- show the time portion when querying, for convenience
alter session set nls_date_format = 'DD/MM/YYYY HH24:MI';
-- create an inline view with some data, perform select on it
with iv_dates (start_dt, end_dt) as (
select to_date('08/07/2016 09:00','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 11:00','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 10:00','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 10:30','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 10:30','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 12:00','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 13:00','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 14:30','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 14:00','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 15:00','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 15:30','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 16:30','DD/MM/YYYY HH24:MI') from dual
union all
select to_date('08/07/2016 16:30','DD/MM/YYYY HH24:MI'), to_date('08/07/2016 17:30','DD/MM/YYYY HH24:MI') from dual
)
SELECT start_dt
, end_dt
, MAX (end_dt) OVER (ORDER BY start_dt asc
RANGE BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING
)
max_end_dt
FROM iv_dates;
但是,我沒有得到任何結果的最大END_DT ...
+--------------------------------------------------+
¦ START_DT ¦ END_DT ¦ MAX_END_DT ¦
+------------------+------------------+------------¦
¦ 08/07/2016 09:00 ¦ 08/07/2016 11:00 ¦ - ¦
¦ 08/07/2016 10:00 ¦ 08/07/2016 10:30 ¦ - ¦
¦ 08/07/2016 10:30 ¦ 08/07/2016 12:00 ¦ - ¦
¦ 08/07/2016 13:00 ¦ 08/07/2016 14:30 ¦ - ¦
¦ 08/07/2016 14:00 ¦ 08/07/2016 15:00 ¦ - ¦
¦ 08/07/2016 15:30 ¦ 08/07/2016 16:30 ¦ - ¦
¦ 08/07/2016 16:30 ¦ 08/07/2016 17:30 ¦ - ¦
+--------------------------------------------------+
雖然只要我添加日期的另一天,就可以開始「工作「
+--------------------------------------------------------+
¦ START_DT ¦ END_DT ¦ MAX_END_DT ¦
+------------------+------------------+------------------¦
¦ 08/07/2016 09:00 ¦ 08/07/2016 11:00 ¦ - ¦
¦ 08/07/2016 10:00 ¦ 08/07/2016 10:30 ¦ - ¦
¦ 08/07/2016 10:30 ¦ 08/07/2016 12:00 ¦ - ¦
¦ 08/07/2016 13:00 ¦ 08/07/2016 14:30 ¦ - ¦
¦ 08/07/2016 14:00 ¦ 08/07/2016 15:00 ¦ - ¦
¦ 08/07/2016 15:30 ¦ 08/07/2016 16:30 ¦ - ¦
¦ 08/07/2016 16:30 ¦ 08/07/2016 17:30 ¦ - ¦
¦ 09/07/2016 09:00 ¦ 09/07/2016 11:00 ¦ 08/07/2016 11:00 ¦
¦ 09/07/2016 10:00 ¦ 09/07/2016 10:30 ¦ 08/07/2016 11:00 ¦
¦ 09/07/2016 10:30 ¦ 09/07/2016 12:00 ¦ 08/07/2016 12:00 ¦
+--------------------------------------------------------+
只是爲了說明,雖然 - 我不需要分割,我只是想這對我的工作的數據爲一天。
但似乎windowing子句由於日期數據類型而表現不同。我不希望這樣 - 我只是希望它能根據排序工作在前一行,而不是(date - 1)
。是因爲這是一個約會,我該如何處理?
我認爲您正在尋找'ROWS BETWEEN'而不是'RANGE BETWEEN'。 – Noel
您的預期產出是多少?那麼你會發生什麼行1:'08:30 - 11:00',第2行:'09:00 - 10:30',第3行:'09:30 - 10:00'(即第3行嵌套在第1行和第2行)。 – MT0
@諾爾權利。哎呀。你不想知道我咀嚼了多少時間。 – Tom