私は、一連の時間ベースのイベントを持ち、それぞれが開始日と終了日でバインドされたテーブルを持っています。最新の(現在の)イベントの場合、終了日はNULLです。私は重複行を崩壊させ、最も早い開始日と最新の終了日のみを表示しようとしています。日付フィールドにNULLがあると、その行は無視されます。 NVL()で終了日の値をダミーにすることはできますが、フロントエンドロジックがその値を検索して置き換えます。NULL値を持つOracle SQL - max()
NULLを高い値としてソートするmax()関数を取得する方法はありますか?
CREATE TABLE CONG_MEMBER_TERM
(
CONG_MEMBER_TERM_ID NUMBER(10) NOT NULL,
CHAMBER_CD VARCHAR2(30 BYTE) NOT NULL,
CONG_MEMBER_ID NUMBER(10) NOT NULL,
STATE_CD CHAR(2 BYTE) NOT NULL,
DISTRICT NUMBER(10),
START_DT TIMESTAMP(6) WITH TIME ZONE,
END_DT TIMESTAMP(6) WITH TIME ZONE
)
このクエリは機能しますが、終了日がNULLの行は削除されます。
select CONG_MEMBER_ID,
district,
min(start_dt),
max(end_dt)
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
このクエリによって修正されましたが、今では「ダミー」の終了日の値(9/9/9999)があります。むしろコードを書く必要はありません。
select CONG_MEMBER_ID,
district,
min(start_dt),
max(nvl(end_dt, to_date('9/9/9999', 'mm/dd/yyyy')))
from CONG_MEMBER_TERM
where CONG_MEMBER_ID = 1716
group by CONG_MEMBER_ID, district;
ありがとうございます。
あなたは答えを受け入れていない多くの質問を持っているあなたが戻って正しい答えをマークすることができれば、あなたの質問にもっと関心を取得します(回答の左側にある目盛線を使用して)。 – bendataclear
私はAccept機能についても知らなかった。戻って古い回答の一部を更新します。 – nibeck