2017-01-24 15 views
0

私は、燃料がどれくらいの燃料を持っているのかを私たちに教えてくれるid列とfuel_in_ltr列を持っているテーブルを持っています。特定の時間にどのくらいの燃料を持っているのか。ここでは上記のINSERT文で与えられたテーブルから燃料の詰め替え時間を取得

create table fuel_details (id number, fuel_in_ltr number, time timestamp); 

insert into fuel_details values (1, 10, '24-jan-2017 12:00'); 
insert into fuel_details values (2, 9, '24-jan-2017 01:00'); 
insert into fuel_details values (3, 8, '24-jan-2017 02:00'); 
insert into fuel_details values (4, 7, '24-jan-2017 03:00'); 
insert into fuel_details values (5, 12, '24-jan-2017 04:00'); 
insert into fuel_details values (6, 11, '24-jan-2017 05:00'); 
insert into fuel_details values (7, 10, '24-jan-2017 06:00'); 
insert into fuel_details values (8, 13, '24-jan-2017 07:00'); 
insert into fuel_details values (9, 12, '24-jan-2017 08:00'); 
insert into fuel_details values (10, 11, '24-jan-2017 09:00'); 
insert into fuel_details values (11, 10, '24-jan-2017 10:00'); 
insert into fuel_details values (12, 13, '24-jan-2017 11:00'); 

我々は我々がそうでLTR 9 LTRとで2 PM 8を持っていますが、午後4時、我々は12 LTRのを持っている私たちは午後1時に10 LTRの燃料その後、持っている12 PMでそれを見ることができます燃料とは、私たちが4フィートで燃料をリフィルしたことを意味します。上記の表から、各リフィリングの時間を得る必要があります!

私のDBがある - のOracle Database 12cのEnterprise Editionのリリース12.1.0.2.0 - 64ビットの生産

+0

は、タイムスタンプ(または日付を挿入するために文字列を使用しないでください。 )を使用し、暗黙的な変換に依存する代わりに、フォーマットマスクを指定する 'TO_TIMESTAMP()'を使用するか、ANSIタイムスタンプリテラルを使用するべきです - つまり 'TIMESTAMP '2017-01-24 00:00:00"。 – MT0

+0

私は将来覚えています。 – mradul

答えて

1

LAG分析関数を使用します。

SELECT id, time 
FROM (
    SELECT f.*, 
     LAG(fuel_in_ltr) OVER (ORDER BY time, id) AS prev_fuel_in_ltr 
    FROM fuel_details f 
) 
WHERE fuel_in_ltr > prev_fuel_in_ltr; 
+0

素晴らしい!ありがとう私はより多くの研究が必要です:) – mradul

+0

@mradul質問、私たちは5リットルと言うが、10を使用してタイムスタンプの間にどうなるのでしょうか?それが埋もれてしまったら、それを逃すだろうか? – BobC

+0

@BobC OPの質問によれば、時間当たりの使用率は1時間あたり1リットルで安定しています。これを知っていれば、クエリは 'where fuel_in_ltr> prev_fuel_in_ltr - :hourly_usage'に変更できます。しかし、ユニットを燃料補給するために1時間オフにしなければならない場合、または時間当たりに使用される燃料の量が動的であるため、一定量のドメイン知識が適用されなければならない場合、これは意味をなさないでしょう。 – MT0

関連する問題