2017-03-28 2 views
0

Ich versuche, die folgende Bedingung zu erhalten: Jede LID ist mehrere BID zugeordnet und jede BID hat einen AvgTrustValue. Ich möchte für jeden Deckel eine BID mit dem niedrigsten AvgTrustValue findenErhalten Sie verbunden mindestens

ich getan habe folgendes:

SELECT DISTINCT LID, T1.BID, AvgTrustValue 
FROM Loans T1, Repayments T2, 
    (SELECT BID, AVG(trust_value) As AvgTrustValue 
    FROM Assign 
    GROUP BY BID) T3 
WHERE T1.LoanID = T2.LoanID 
AND T1.BID = T3.BID 
ORDER BY LID 

aber es gibt mir nur folgendes:

| LID | BID | 
|S2262450A | S7444319C | 82 
|S2848191X | S7611209X | 76 
|S2848191X | S9981233W | 100 
|S4495282I | S7444319C | 82 
|S4792394D | S7444319C | 82 
|S4792394D | S7611209X | 76 
|S7145303Q | S7611209X | 76 
|S7173102K | S7444319C | 82 

Was ich wünsche zu bekommen ist Folgendes:

| LID | BID | 
|S2262450A | S7444319C | 82 
|S2848191X | S7611209X | 76 
|S4495282I | S7444319C | 82 
|S4792394D | S7611209X | 76 
|S7145303Q | S7611209X | 76 
|S7173102K | S7444319C | 82 

Ich habe auch versucht, folgen ing aber nicht bestanden:

SELECT DISTINCT LID, T1.BID, min(AvgTrustValue) 
FROM Loans T1, Repayments T2, 
    (SELECT BID, AVG(trust_value) As AvgTrustValue 
    FROM Assign 
    GROUP BY BID) T3 
WHERE T1.LoanID = T2.LoanID 
AND T1.BID = T3.BID 
GROUP BY LID 
ORDER BY LID 

Vielen Dank.

Antwort

2

Sie row_number Fensterfunktion verwenden können, eine Zeile pro Deckel mit mindestens AvgTrustValue zu erhalten:

select * 
from (
    select t.*, row_number() over (
      partition by lid order by AvgTrustValue 
      ) as rn 
    from your_table t 
    ) t 
where rn = 1; 

Oder verwenden TOP with ties:

select top 1 with ties * 
from your_table 
order by row_number() over (
     partition by lid order by AvgTrustValue 
     ); 
+0

Ich mag die WITH TIES Option ... sieht immer sauberer zu mir +1 –

+0

Danke. Die TOP WITH TIES-Lösung ist großartig. –

0

Ich denke, auch wäre OK 'nicht existiert'

Wählen Sie lid, bid, avgvalue von Ihrer_Tabelle a wo nicht existiert (wählen Sie 1 aus Ihrer_Tabelle, wo Lid = a.lid und avgvalue> a.avgvalue)

Verwandte Themen