sql >> データベース >  >> RDS >> Oracle

Oracle Select Max Date on Multiple records

    追加する必要があると思います...

    AND outside.asset_tag=inside.asset_tag
    

    ... ONの基準に リスト。

    また、RIGHT OUTER JOIN 必要ありません。 INNER JOIN asset_tagの組み合わせはあり得ないため、同じ結果が得られます(より効率的になる可能性があります)。 およびlast_read_date mp_vehicle_asset_profileに存在しないサブクエリ内 。

    それでも、「同点」がある場合、つまり、同じlast_read_dateを持つ複数の行がある場合、クエリはアセットタグごとに複数の行を返す可能性があります。 。対照的に、@ Lamakの分析ベースの回答では、この状況で1行だけが任意に選択されます。

    あなたのコメントは、mtr_readingが最も高い行を選択して関係を解消したいことを示唆しています。 last_read_dateの場合 。

    ORDER BYを変更することで、@Lamakの分析ベースの回答を変更してこれを行うことができます。 OVERで 条項:

    ORDER BY last_read_date DESC, mtr_reading DESC
    

    それでも同点がある場合(つまり、同じasset_tagを持つ複数の行 、last_read_date 、およびmtr_reading )、クエリは再び正確に1行を選択します。

    最高のmtr_readingを使用して、集計ベースの回答を変更して関係を解消することができます 次のように:

    SELECT  
        outside.asset_tag, 
        outside.description,
        outside.asset_type,
        outside.asset_group,
        outside.status_code,
        outside.license_no,
        outside.rentable_yn,
        outside.manufacture_code,
        outside.model,
        outside.manufacture_vin,
        outside.vehicle_yr,
        outside.meter_id,
        outside.mtr_uom,
        outside.mtr_reading,
        outside.last_read_date 
    FROM 
        mp_vehicle_asset_profile outside 
        INNER JOIN 
        ( 
            SELECT
                asset_tag, 
                MAX(last_read_date) AS last_read_date,
                MAX(mtr_reading) KEEP (DENSE_RANK FIRST ORDER BY last_read_date DESC) AS mtr_reading
            FROM
                mp_vehicle_asset_profile 
            GROUP BY
                asset_tag 
        ) inside 
        ON 
            outside.asset_tag = inside.asset_tag
            AND
            outside.last_read_date = inside.last_read_date
            AND
            outside.mtr_reading = inside.mtr_reading
    

    それでも同点がある場合(つまり、同じasset_tagを持つ複数の行 、last_read_date 、およびmtr_reading )、クエリは再び複数の行を返す場合があります。

    分析ベースの回答と集計ベースの回答が異なるもう1つの方法は、nullの処理です。 asset_tagのいずれかがある場合 、last_read_date 、またはmtr_reading nullの場合、分析ベースの回答は関連する行を返しますが、集計ベースの回答は返しません(結合の等価条件がTRUEに評価されないため) nullが含まれる場合。



    1. パラメータ化されたクエリを作成し、Pythonを関数にカプセル化する任意の方法

    2. 読み取り呼び出しからマイナス1を取得しました

    3. 条件が存在する場合、テーブル内の複数の行を別のテーブルから更新します

    4. デフォルトでpostgresql構文を強調表示するemacsを作成する