困难的MySQL声明

时间:2013-09-22 18:41:40

标签: mysql sql

我有这个查询,但结果是错误的。

如何使用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

{{1}}

1 个答案:

答案 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'))