2009-08-10 24 views
1

これは簡単なことですが、空白を描画しています。SQLサブクエリ - JobValueが最大のJobIDを選択

Select * from 
.... 
inner join 
    (
    select JobsID, Value from Jobs where Value **is the highest** 
) as MaxJob on MaxJob.CustID = A.CustID 

inner join 
    (
    select other information based upon MaxJob.JobID 
) as OtherStuff 

最初のサブクエリには最大値のジョブのジョブIDを教えてもらえますか?

ありがとう...これは簡単に思えるし、私は非常に基本的なものを見落としていると確信しています。その日のうちの1つ...

編集:この質問は少し曖昧であるため、より詳細な質問here(この質問は正しく回答されているため)を書きました。

答えて

2

を読み違えますthayがすべて同じ値を持つ場合、複数のJobIdsを与えます。だから、あなたがすることを望んでいないと仮定すると、私はおそらく行いたい:SQL Server 2005およびそれ以降のに優れた新しい言語機能:はい、あなたは何かを

SELECT MAX(JobId) as JobId FROM Jobs WHERE Value = SELECT MAX(Value) FROM Jobs 
+0

これは私が尋ねた質問に対する正解です。残念ながら、私はちょっと間違って質問したので、私の状況にはまったく当てはまらない(気になる)。私はしばらくしてからもう一度投稿します。ご協力いただきありがとうございます。 –

0
select max(JobId), value from jobs where... 

編集:

SELECT JobId FROM Jobs WHERE Value = SELECT MAX(Value) FROM Jobs 

しかし、こと:あなたが最も高い値を持つ単一のJobIdをしたい場合は私の悪い私は質問、このかもしれない仕事

select jobid, max(value) from jobs.... 
+0

この集計エラーは集計で選択項目に1つの項目を持つことはできませんが、他の項目では集計できません。 –

+0

ああ、非常に興味深いです、私はMySQLで試してみましたが、SQLサーバーで試してみました。それについて申し訳ありません!あなたが好奇心が強い場合、それはMySQLで動作します –

1

見下ろすています!特に、row_number()や非常にクールなCROSS APPLYのような分析関数が参加します。

ROW_NUMBERは、最初の質問(与えられた他のもののために「最高」のものを選ぶ)を解決します

with Ranked(a,b,c,d,rk) as (
    select T1.a,T2.b,T2.c,T2.d, 
    row_number() over (
     partition by T1.a 
     order by T2.x desc 
    ) 
    from T1 join T2 on someCondition 
) 
    select a,b,c,d 
    from Ranked 
    where rk = 1; 

CROSSは、2番目の質問解決適用 - 「MaxJob.JobIDに基づいて、」表ソースの作成:

select * 
from tableOrJoin 
cross apply (
    select stuff 
    from elsewhere 
    where something = tableOrJoin.JobID 
) as A 

つまり、右側のテーブルソースの定義で左側のテーブルソースからの列値を使用して、「相関結合」を行うことができます。

特定の質問がある場合は、より具体的な情報をお知らせください。あなたのソリューションでこれらの新機能を両方使うことができると思われます。

2
Select top 1 JobId, Value from Jobs order by Value desc 

これはMAX(値)よりも悪い性能をもたらすことができるが、それはj.JOBIDによってj.Valueパーティションから(順OVER少ないコード

+0

私はこれについて考えましたが、サブクエリーの権利では機能しませんか? –

+0

うわー、私は "Order By"の "Top 1"はサブクエリでは動作しないと思ったが、間違っていた。 –

0

SELECT j.JOBID、MAX(値)であります)MAX_VALとして、ジョブズJ INNER FROM s.foobarはSomeOtherTableのON(s.jobid = j.jobid)booya =

に勝つ、私はあなたを知らない原因となるが、意味をなさない可能性が疑われる を登録しようテーブル:D

しかし、過度の威力と分裂。それを知って、それを愛してください。

+0

これでちょっと試してみるよ、ありがとう –

関連する問題