2017-07-07 15 views
0

参考のために下表を参照してください。私は最小値を含む重複した行を返す必要があります。重複分の値を返します

この例では、SLAT_LEN = 30または最小SLAT_LENの2行のみを表示したいとします。私はランクを試しましたが、私はそれをすると連続ランクをします。私は重複サイズが同じランクを持ち、サイズによって連続してランク付けされることを望みます。

サイズはので、私はちょうど= 30

SLAT_LENなどの条件を使用することはできませんまたは私が取るべき異なったアプローチがある変更しますか?

select * 
    from(
    select lg.wd_demand_id,wm.slat_len, wm.prof_size, wm.wd_material_id, wm.color, rank() over (partition by wm.slat_len order by lg.wd_demand_id) as rank 
    from wd_demand_log lg, wd_bins wb, wd_material wm, wd_bins_material wbm 
    where lg.wd_bins_id = wb.wd_bins_id 
    and lg.wd_material_id = wm.wd_material_id 
    and lg.wd_bins_id = wbm.wd_bins_id 
    and lg.wd_material_id = wbm.wd_material_id 
    AND lg.plant_id = 44 AND lg.dept_id = 220 AND wb.plant_id = 44 AND wb.dept_id = 220 
    AND NOT EXISTS(SELECT dmpln.wd_demand_id FROM wd_demnd_pln_inv dmpln WHERE dmpln.wd_demand_id = lg.wd_demand_id) 
    AND wm.prof_size = '2' AND wm.color = 450 
    AND lg.wd_po_error is null) 

enter image description here

+1

私はそのランクのものを取得しません。なぜ 'partition by wm.slat_len'ですか?なぜ '' lg.wd_demand_id'による注文?単純に 'rank()over(order by wm.slat_len)'を探していませんか? (または、ORDER BY wm.slat_lenは、Oracle 12cを使用している場合のために、最初の1行をTIESで取得しますか?) –

+0

@ThorstenKettnerありがとう!私は "パーティションバイ"を削除することを考慮しませんでした。それは私が探していたものを正確に私に与えました。 –

+0

さて、これを回答として投稿しますので、将来の読者は簡単に解決策を見つけることができます。 –

答えて

2

あなたはランクに範囲を与えるためにPARTITION BYを使用すると思います。 ORDER BYはランキングを指定します。おそらく、私は問題を正しく理解していないです

ORDER BY wm.slat_len 
FETCH FIRST 1 ROW WITH TIES; 
0

が、ここにある:あなたがFETCH FIRSTとあなたの結果を制限することができたOracle 12cとを持っている場合、だからあなたの場合には、あなたは

rank() over (order by wm.slat_len) 

のようなものが必要になります私の潜在的な解決策:

WITH aset 
    AS (SELECT lg.wd_demand_id 
       , wm.slat_len 
       , wm.prof_size 
       , wm.wd_material_id 
       , wm.color 
      FROM wd_demand_log lg, wd_bins wb, wd_material wm 
       , wd_bins_material wbm 
      WHERE lg.wd_bins_id = wb.wd_bins_id 
      AND lg.wd_material_id = wm.wd_material_id 
      AND lg.wd_bins_id = wbm.wd_bins_id 
      AND lg.wd_material_id = wbm.wd_material_id 
      AND lg.plant_id = 44 
      AND lg.dept_id = 220 
      AND wb.plant_id = 44 
      AND wb.dept_id = 220 
      AND NOT EXISTS 
        (SELECT dmpln.wd_demand_id 
         FROM wd_demnd_pln_inv dmpln 
         WHERE dmpln.wd_demand_id = lg.wd_demand_id) 
      AND wm.prof_size = '2' 
      AND wm.color = 450 
      AND lg.wd_po_error IS NULL) 
SELECT * 
    FROM aset 
WHERE slat_len = (SELECT MIN (slat_len) 
        FROM aset) 
関連する問題