私は前の行のウィンドウで最大の日付を取得しようとしています。注目すべきは、日付の実際の時間部分です。日付の保存時間を持つMAXの解析関数
実際のテーブルにはさらに多くの日付のデータが含まれていますが、クエリはデータを1日に制限するための引数として日付をとる関数にあります。すぐに私は別の日の日付を追加すると、それが働いて「始めましょうけれどもしかし、私は...
+--------------------------------------------------+
¦ 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 ¦ - ¦
+--------------------------------------------------+
を最大end_dtのための任意の結果が届かない
+---------------------------------------------------------------------+
¦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;
"
+--------------------------------------------------------+
¦ 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 ¦
+--------------------------------------------------------+
私はパーティションを作成する必要はありませんが、私はこれをデータ用に1日使いたいと考えています。
しかし、windowing節が日付データ型のために異なる動作をしているようです。私はそれを望んでいません - 私はちょうどそれが並べ替えに従って、実際の前の行で動作するように、(date - 1)
ではありません。それは日付なので、それはどうですか?私はこれをどのように扱うことができますか?
私はあなたが 'RANS BETWEEN'ではなく' ROWS BETWEEN'を探していると思います。 – Noel
期待される出力は?行1:「08:30 - 11:00」、行2:「09:00 - 10:30」、行3:「09:30 - 10:00」(つまり行3がネストされています行1と行2の両方)。 – MT0
@ Noel Right。おっとっと。あなたは私がこれを噛んでいた時間を知りたくありません。 – Tom