[英]SQL Sub-query — Select JobID with a maximum JobValue
這似乎是一件容易的事,但我正在空白。
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?
謝謝...這似乎很簡單,我敢肯定我忽略了一些非常基本的內容。 那些日子中的一天...
編輯:由於這個問題是有點曖昧,我已經寫了一個更詳細的問題在這里 (因為這個問題被回答正確)。
如果您希望單個JobId具有最高的價值:
SELECT JobId FROM Jobs WHERE Value = SELECT MAX(Value) FROM Jobs
但是,如果它們都具有相同的值,則可能會給您多個JobId。 因此,假設您不希望這樣做,我可能會這樣做:
SELECT MAX(JobId) as JobId FROM Jobs WHERE Value = SELECT MAX(Value) FROM Jobs
Select top 1 JobId, Value from Jobs order by Value desc
這可能會導致性能比max(Value)差,但是代碼更少
是的,您忽略了一些東西:SQL Server 2005和更高版本中出色的新語言功能! 特別是像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 APPLY解決了第二個問題-“基於MaxJob.JobID”創建表源:
select *
from tableOrJoin
cross apply (
select stuff
from elsewhere
where something = tableOrJoin.JobID
) as A
換句話說,它允許您在右側表源的定義中使用左側表源中的列值進行“關聯聯接”。
如果您有特定問題,請提供更多具體信息。 我懷疑您可能可以在解決方案中同時使用這兩個新功能。
select max(JobId), value from jobs where...
編輯:我不好我讀錯了問題,這可能會工作
select jobid, max(value) from jobs....
從作業j INNER JOIN SomeOtherTable s ON(s.jobid = j.jobid)中選擇j.JOBID,MAX(Value)OVER(按j.Value PARTITION由j.JOBID排序)作為max_val,s.foobar
我懷疑這可能毫無意義,因為我不知道您的表:D
但是,學習重疊和分區的能力。 學習,愛它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.