2017-06-13 10 views
0

私はselect文を持っています。ユニークキーの最大日付行を選択してください

  SELECT x.ndc_id 
     ,z.attr_val AS trade_name 
     ,x.quote_price 
     ,x.eff_dt FROM contract_ndc_brg x 
     LEFT JOIN ndc_attr AS z ON z.field_id = 150 
     where contract_num_val = (
      SELECT item_name 
      FROM [contract] 
      WHERE item_id = 184 
      ) 

enter image description here

お知らせ同じndc_idを持つ2つの行があります。私はこれらの結果が欲しいですが、eff_dtが最も高いndc_idのそれぞれに対して1つの結果しかありません。

私はwhere句に追加してみました:

  SELECT x.ndc_id 
     ,z.attr_val AS trade_name 
     ,x.quote_price 
     ,x.eff_dt FROM contract_ndc_brg x 
     LEFT JOIN ndc_attr AS z ON z.field_id = 150 
     where contract_num_val = (
      SELECT item_name 
      FROM [contract] 
      WHERE item_id = 184 
      ) and x.eff_dt = (select max(eff_dt) from contract_ndc_brg where contract_num_val = (
      SELECT item_name 
      FROM [contract] 
      WHERE item_id = 184 
      )) 

私はこれで問題は、それが任意の行の最大の日付を返しているということです考え出しました。

私は間違っていることをどのように修正できますか?

+1

あなたは 'GROUP BY'にしようとしましたか? – Sami

+0

@Samあなたは精巧にできますか? –

答えて

1

ROW_NUMBER()はあなたの友達です:

with q as 
(
     SELECT x.ndc_id 
     ,z.attr_val AS trade_name 
     ,x.quote_price 
     ,x.eff_dt 
     ,row_number() over (partition by nc_id order by eff_dt desc) rn 
     FROM contract_ndc_brg x 
     LEFT JOIN ndc_attr AS z ON z.field_id = 150 
     where contract_num_val = (
      SELECT item_name 
      FROM [contract] 
      WHERE item_id = 184 
      ) 
) 
select nc_id, trade_name, quote_price, eff_dt 
from q 
where rn = 1 
+0

私は取得しています:メッセージ156、レベル15、状態1、行7 キーワードの近くの構文が正しくありません。 メッセージ102、レベル15、状態1、行14 ')'の近くの構文が正しくありません。 –

+0

入力ミスが修正されました。 FROMはeff_dtと同じ行で始まった –

+0

素晴らしい感謝! –

関連する問題