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

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

最佳答案

您可以有一个子查询,该子查询分别为每个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'))

关于mysql - 困难的MySQL陈述,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18947455/

10-11 02:45