1

Oracle 11g データベースのテーブルの場合:

CREATE TABLE mytable (START_DATE_TIME DATE, END_DATE_TIME DATE);
MYTABLE (START_DATE_TIME,END_DATE_TIME) 値に挿入 (to_date('06/20/2013 01:30:00 PM','MM/DD/YYYY HH:MI:SS AM'),to_date('06/20/2013 06) :15:00 PM','MM/DD/YYYY HH:MI:SS AM'));
MYTABLE (START_DATE_TIME,END_DATE_TIME) 値に挿入 (to_date('06/21/2013 06:45:00 PM','MM/DD/YYYY HH:MI:SS AM'),to_date('06/22/2013 06) :45:00 AM','MM/DD/YYYY HH:MI:SS AM'));
MYTABLE (START_DATE_TIME,END_DATE_TIME) 値に挿入 (to_date('06/23/2013 06:45:00 AM','MM/DD/YYYY HH:MI:SS AM'),to_date('06/23/2013 10) :30:00 PM','MM/DD/YYYY HH:MI:SS AM'));
MYTABLE (START_DATE_TIME,END_DATE_TIME) 値に挿入 (to_date('06/25/2013 08:00:00 AM','MM/DD/YYYY HH:MI:SS AM'),to_date('06/25/2013 05) :30:00 PM','MM/DD/YYYY HH:MI:SS AM'));
MYTABLE (START_DATE_TIME,END_DATE_TIME) 値に挿入 (to_date('06/25/2013 05:30:00 PM','MM/DD/YYYY HH:MI:SS AM'),to_date('06/26/2013 05) :30:00 AM','MM/DD/YYYY HH:MI:SS AM'));
START_DATE_TIME END_DATE_TIME
2013/06/20 01:30:00 午後 2013/06/20 06:15:00 午後
2013/06/21 06:45:00 午後 2013/06/22 06:45:00 午前
2013/06/23 06:45:00 午前 2013/06/23 10:30:00 午後
2013 年 6 月 25 日 08:00:00 午前 2013 年 6 月 25 日 05:30:00 午後
2013/06/25 05:30:00 午後 2013/06/26 05:30:00 午前

私の目標は、END_DATE_TIME から直近の START_DATE_TIME までの時間を見つけることです。

私のクエリは次のとおりです。

start_date_time を選択し、
  end_date_time、
  ROUND((next_start_date - end_date_time)*24,2) Hours_to_next_start
から
  (SELECT t.start_date_time,
    t.end_date_time、
    (SELECT MIN(t2.start_date_time)
    FROM mytable t2
    WHERE t2.start_date_time >= t.end_date_time
    ) next_start_date
  FROM mytable t
  ORDER BY t.start_date_time
  )

そして私は結果を得る:

START_DATE_TIME END_DATE_TIME HOURS_TO_NEXT_START
2013 年 6 月 20 日 01:30:00 午後 2013 年 6 月 20 日 06:15:00 午後 24.5
2013/06/21 06:45:00 午後 2013/06/22 06:45:00 午前 24
2013 年 6 月 23 日 06:45:00 午前 2013 年 6 月 23 日 10:30:00 午後 33.5
2013 年 6 月 25 日 08:00:00 午前 2013 年 6 月 25 日 05:30:00 午後 0
2013 年 6 月 25 日 05:30:00 午後 2013 年 6 月 26 日 05:30:00 午前 NULL

私が知る限り、正常に動作します。しかし、選択の二次クエリなしでこれを行うためのより良い、または少なくとも新しい方法があるかもしれないと何かが教えてくれますか?

あなたは何を言っていますか?

4

2 に答える 2

-1

このクエリを使用して、HH.MM として返される 2 つの日付間の差分時間を取得します

SELECT 
CONCAT
(
 DATEDIFF(MI,'06/20/2013 01:30:00 PM','06/20/2013 06:15:00 PM') / 60 ,'.', DATEDIFF(MI,'06/20/2013 01:30:00 PM','06/20/2013 06:15:00 PM') % 60
)
于 2016-03-01T06:23:49.720 に答える