は、誰かが下記の要件を実装するアイデアを支援することができます。OracleのSQLクエリの論理グループによる日付の差に基づいては
私の要件は、以下のスクリーンショットに従って累積履歴を管理するターゲットテーブルを持つことです。
ソース/ターゲットテーブルの構造とソースサンプルレコードのSQLコードについては、以下を参照してください。
CREATE TABLE "XHQ"."SHIFT_LOG" ("SEQUENCE_ID" NUMBER(10,0),
"JOB_ID" NUMBER(10,0),
"START_TS" DATE,
"END_TS" DATE,
"MINIMUM_VALUE" FLOAT(126),
"MAXIMUM_VALUE" FLOAT(126),
"AVERAGE_VALUE" FLOAT(126),
"USERID" NVARCHAR2(80));
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10908,12000,to_date('01-MAY-15','DD-MON-RR'),null,null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10825,12000,to_date('29-APR-15','DD-MON-RR'),to_date('01-MAY-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10800,12000,to_date('29-APR-15','DD-MON-RR'),to_date('29-APR-15','DD-MON-RR'),5,10,7.5,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10725,10500,to_date('28-APR-15','DD-MON-RR'),to_date('29-APR-15','DD-MON-RR'),4,8,6,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10625,10500,to_date('27-APR-15','DD-MON-RR'),to_date('27-APR-15','DD-MON-RR'),6,6,6,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10620,10500,to_date('23-APR-15','DD-MON-RR'),to_date('27-APR-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10525,10500,to_date('22-APR-15','DD-MON-RR'),to_date('23-APR-15','DD-MON-RR'),null,null,null,'admin');
Insert into XHQ.SHIFT_LOG (SEQUENCE_ID,JOB_ID,START_TS,END_TS,MINIMUM_VALUE,MAXIMUM_VALUE,AVERAGE_VALUE,USERID) values (10510,10500,to_date('18-APR-15','DD-MON-RR'),to_date('20-APR-15','DD-MON-RR'),8,16,8,'admin');
私は要件の概要を説明してみましょう。
は、ジョブID sequenceidを1として= 10500
考えてみましょう:10510を、それは18 4月に開始し、20 - 4月まで走っています。正常に完了すると、サマリとしてそれに対応する最小、最大、平均値を取得します。
しかし、配列ID:10525を考慮すると、それは22-aprによって開始され、23-aprまで実行されました。しかし、何らかのネットワーク停止のために、数分間中断して再び開始しました。そのため、ジョブが不完全であるため、最小、最大、平均値がNULLになります。再びそれは27日に別のネットワークの問題を抱えていたので、停止して再開しました。最後に27th apr(sequence id:10625)に成功裏に完了し、最小、最大、平均値が割り当てられました。
以下のように10625をsequenceidするために割り当てられますするシーケンスIDから単一のグループとstart_tsとして考慮されるべきシーケンス番号の10625、10620と10525のニーズ10525人のニーズに属するこの場合のレコードエントリで
end_tsがnullの場合(シーケンスID:10908)(現在アクティブなジョブを示しています)、上記の例外が1つあります。ここでグループ化
はシーケンスIDでなければならない:10825と出力スクリーンショット以下のようにようであるべきです。
何かの明確化が必要な場合は、私に教えてください。
時間と貴重なご意見をお寄せいただきありがとうございます。
あなたはそれが1のようであり、論理演算子の実行順序を教えてもらえ) '(MINIMUM_VALUEが OR new_seq_idがNULL IS NULLではありません)AND end_tsはNULL'であるか、または2) 'minimum_value IS NOT NULL OR(new_seq_idはNULL、end_tsはNULL)'のようになります。どちらが最初に評価されるかを意味します。 –
@sql_dummy SQL標準では、たとえばJava、C++ではなく、 'x OR y AND z'という条件の評価の順序は定義されていません。データベースは、thiksが優れている評価の順序を自由に選択できます。 SQLは宣言型言語です - 私は評価の順序は気にしません: "x OR y AND z'という条件が真である行を与えてください" – krokodilko
しかし、それはreultを変更しませんか? 'xが真、yが偽、zが偽' 'case1'で条件がfalseを返し、' case2'で条件が真を返すとします。 –