2013-09-22 55 views
0

我有這個查詢,但結果是錯誤的。困難的MySQL聲明

我該如何使用min()聲明和Group by聲明,以便我會得到每個AthletenID最低的DiszOrder

Select 
    ar_Leistungen.`AthletenID`, 
    ar_Leistungen.`Leistung`, 
    ar_Leistungen.`Disziplin`, 
    ar_Leistungen.`Klasse`, 
    min(ar_Leistungen.`DiszOrder`), 
    ar_Athleten.`Vorname`, 
    ar_Athleten.`Jahrgang`, 
    ar_Wettkampf.`Wettkampfdatum` 
from 
    ar_Leistungen, 
    ar_Athleten, 
    ar_Wettkampf 
Where 
    ar_Athleten.ID = ar_Leistungen.AthletenID and 
    ar_Leistungen.WettkampfID = ar_Wettkampf.ID and 
    ar_Leistungen.`Disziplin` = '100' and 
    ar_Leistungen.`Leistung` > 0 and 
    (ar_Athleten.`Jahrgang` = '1995' or ar_Athleten.`Jahrgang` = '1994') and 
    ar_Wettkampf.`Wettkampfdatum` LIKE '%2013%' 
Group By 
    AthletenID 
Order by 
    DiszOrder Desc 
Limit 
    0, 100 
+0

請根據此數據提供樣本數據(僅相關列)和所需輸出。 –

回答

0

你可以有一個子查詢其分別得到最低DiszOrder每個AthletenID,並與其他表連接,所以你可以免費獲得列的其他價值。

SELECT a.AthletenID, 
     a.Leistung, 
     a.Disziplin, 
     ar_Leistungen.Klasse, 
     a.DiszOrder), 
     b.Vorname, 
     b.Jahrgang, 
     c.Wettkampfdatum 
FROM ar_Leistungen a 
     INNER JOIN ar_Athleten b 
      ON b.ID = a.AthletenID 
     INNER JOIN ar_Wettkampf c 
      ON a.WettkampfID = c.ID 
     INNER JOIN 
     (
      SELECT AthletenID, MIN(DiszOrder) DiszOrder 
      FROM ar_Leistungen 
      GROUP BY AthletenID 
     ) d ON a.AthletenID = d.AthletenID AND 
       a.DiszOrder = d.DiszOrder 
WHERE a.Disziplin = '100' AND 
     a.Leistung > 0 AND 
     (b.Jahrgang IN ('1995', '1994'))