2012-03-13 18 views
3

私はテーブルから最大値の前に取得したいdiをfolowingしています。私はそのmax.For例のpreviouseを取得したい各vehicle.Butの各最大カード番号を持って、このクエリを通じ最大値から前に取得

select max(card_no),vehicle_number 
FROM WBG.WBG_01_01 
group by vehicle_number 

車両番号は、カード番号21,19,17,10,5,6,1を持っていると私はから19を取得したい場合max function

私はSQLでこれを行う方法を教えてください。

+1

カードを注文する既知の方法がない限り、私はあなたが望むものは可能ではないと思います。 「21、17、19、10、5、6、1」の順番はどうやって決められていますか? – ninesided

+0

@ninesided何が不可能なのでしょうか? – Shaheer

+1

あなたが実際に '19'を探しているように見えるか、あなたの質問に何かが欠けているように見えます... –

答えて

0

はこの1つを試してみてください。

select max(card_no),vehicle_number 
FROM WBG.WBG_01_01 
where card_no < (Select max(card_no) from WBG.WBG_01_01 group by vehicle_number) 
group by vehicle_number 
+0

これは、グループ化されたvehicle_numberに関係なく、非常に大きな 'card_no'を選択します。私は彼が探しているものだとは思わない。 – doctorless

+0

私はそれを今編集しましたか? – Shaheer

+0

親愛なるora-01427が生成しています.its dnt works –

1

もう一つのアイデアは、Analyticsを使用することであろう、このような何か:もちろん

select 
    vehicle_number, 
    prev_card_no 
from (
    select 
     card_no, 
     vehicle_number, 
     lag(card_no) over 
      (partition by vehicle_number order by card_no) as prev_card_no, 
     max(card_no) over 
      (partition by vehicle_number) as max_card_no 
    FROM WBG.WBG_01_01 
) 
where max_card_no = card_no; 

を、これはあなたからアカウントに、一見、任意の順序を取ることはありません。それは最大の重複数では機能しません。

関連する問題