2012-03-23 17 views
1

Ich versuche, den niedrigsten Wert für jede Gruppe von Daten nach einer Spalte gruppiert.MySQL - Gruppe Nach einer Spalte und den niedrigsten Wert erhalten

In Englisch möchte ich meine Daten in Gruppen nach Unterkunft ordnen, aber nur den niedrigsten Personenkosten für jede Unterkunft zurückgeben.

fand ich ein ähnliches Beispiel (meinen Versuch, mit ihm unten) bei MySQL Group By get title column with smallest date value


SELECT t1 . * FROM tbl_TravelFeed AS t1 
    INNER JOIN 
    (SELECT pk_id, MIN(perperson) AS perperson FROM tbl_TravelFeed 
     GROUP BY accommodation 
     ORDER BY perperson) AS t2  
    ON t1.pk_id = t2.pk_id AND t1.perperson = t2.perperson 

Dies scheint fast Arbeit, aber es gibt einen Eintrag, der von niedrigsten ID statt proPerson. Ich kann nicht verstehen, warum ich es korrigieren kann.

Ich versuche, eine Universität Aufgabe für Dienstag (27. März '12) zu beenden und würde gerne, dass dies richtig funktioniert, aber es ist nicht kritisch im größeren Bild.

Ich habe viele Möglichkeiten, dies einschließlich der Verwendung von Distinct. Die obige Abfrage scheint ihr am nächsten zu liegen.

Wäre sehr dankbar für jede Hilfe.

Aaron

+2

@Cfreak Warum die Hausaufgaben-Tag entfernen? OP gibt an, dass dies eine universitäre Aufgabe ist. – jzworkman

+0

@jzworkman wenn ich es tat, war zufällig. Ich habe versucht, die Abfrage zu bereinigen – Cfreak

Antwort

0

Sie sind sehr nah dran. Da Sie nach Unterkunft gruppieren, ist der entsprechende Link von der inneren Tabelle und der äußeren Tabelle das accommodation Feld, nicht pk_id:

(SELECT accommodation, MIN(perperson) AS perperson FROM tbl_TravelFeed 
    GROUP BY accommodation 
    ORDER BY perperson) AS t2 
ON t1.**accommodation** = t2.**accommodation** AND t1.perperson = t2.perperson 
+0

Dies ist sehr nah, danke Ihnen. Sie müssen nur die Situationen behandeln, in denen mehrere Datensätze mit demselben niedrigsten Wert vorhanden sind – asest

2

Dies ist nicht getestet, aber das ist, wie ich es in MySQL schreiben würde, können Sie den Grund Ich stelle meine Unterabfrage in die WHERE-Anweisung, so dass ich einfach eine VIEW aus dieser Abfrage erstellen und die Ergebnisse immer in einer separaten Ansicht speichern kann, damit ich Abfragen dafür machen kann.

SELECT * FROM tbl_Travelfeed AS t 
WHERE perperson = 
(
    SELECT MIN(perperson) 
    FROM tbl_Travelfeed 
    WHERE accommodation = t.accommodation 
) 
0
SELECT t.* 
FROM 
     tbl_TravelFeed AS t 
    INNER JOIN 
     (SELECT accommodation 
       , MIN(perperson) AS perperson 
      FROM tbl_TravelFeed 
      GROUP BY accommodation 
     ) AS g 
     ON g.accommodation = t.accommodation 
     AND g.perperson = t.perperson 
Verwandte Themen