2017-06-23 3 views
0
A   B  C 
+--------+-------+----+ 
| 310 | 09001 | 18 | 
| 80614 | 09001 | 18 | 
| 169009 | 09001 | 19 | 
| 201695 | 09001 | 19 | 
| 282089 | 09001 | 19 | 
| 320438 | 09001 | 19 | 
| 131733 | 09001 | 19 | 
| 387427 | 09001 | 19 | 
| 404201 | 09001 | 19 | 
| 525449 | 09001 | 19 | 
| 605542 | 09001 | 19 | 
| 710740 | 09001 | 18 | 
| 746380 | 09001 | 19 | 
| 867492 | 09001 | 19 | 
| 864637 | 09005 | 18 | 
| 710741 | 09005 | 17 | 
| 746375 | 09005 | 18 | 
| 556470 | 09005 | 18 | 
| 604258 | 09005 | 18 | 
| 401597 | 09005 | 18 | 
| 141331 | 09005 | 18 | 
| 336054 | 09005 | 18 | 
| 387423 | 09005 | 18 | 
| 203706 | 09005 | 18 | 
| 278651 | 09005 | 18 | 
| 126352 | 09005 | 18 | 
| 312 | 09005 | 17 | 
| 74627 | 09005 | 17 | 
+--------+-------+----+ 

Nicht sicher, wie die Frage zu titeln ist, aber hier ist das Szenario. Ich suche nach 1 Zeile für jeden einzelnen Wert in Spalte B, welcher der höchste Wert in Spalte C ist, und der niedrigste in Spalte A.Auswählen des niedrigsten Werts der gruppierten Spalte

Zum Beispiel für 09001 wäre es 169009 09001 19, und für 09005 Es würde 126352 09005 18

Also im Grunde Max der Spalte C gruppiert nach Spalte B und niedrigsten Wert in Spalte A dieser Zeilen angezeigt.

Dank im Voraus

SELECT MIN (A) AS MaxA, B, MAX (C) als MinC aus Tabelle GROUP BY B

gibt

310 09001 19 
312 09005 18 

nicht

131733 09001 19 
141331 09005 18 

was ich brauche

select min(A), B, C from my_table where (C) in ( select max(C) from my_table where B in (09001,09005) group by B) and B in (09001,09005) group by B, C

Ergebnisse in

aber es sollte nur ein Ergebnis sein, für 09001


Select min A,B from my_table where C in (select max(c) from my table where A in (09001, 09005)group by A) and fips in (09001, 09005) group by A

funktionierte, obwohl es nur A und B zeigt, aber alles, was ich brauche, ist A für dieses Beispiel. Ich bin mir sicher, dass es andere Möglichkeiten gibt, C auch zu zeigen.

Vielen Dank für die Hilfe Jungs

+0

aber die erwarteten Ergebnisse mit Ihrer Erklärung nicht übereinstimmen .. –

+0

Warum würden Sie ein Minimum von A einen MaxA nennen? – LukStorms

Antwort

1

Ich glaube, Sie haben bereits ein eigenes Problem gelöst.

SELECT MIN(A) AS MaxA, B, MAX(C) AS MinC 
FROM Table 
GROUP BY B 

Es sei denn, ich habe eine Art dummer Fehler dort gemacht.

EDIT: Ich verstehe die Anforderungen jetzt besser. Gib das eine Chance.

WITH T1 AS (
SELECT B, MAX(C) AS MaxC 
FROM Table 
GROUP BY B 
), T2 AS (
SELECT MIN(A) AS MinA, MaxC 
FROM T1 
GROUP BY MaxC) 

SELECT T2.MinA AS A, T1.B, T1.MaxC AS C 
FROM T1 
INNER JOIN T2 
ON T1.MaxC = T2.MaxC 
+0

Ich habe das versucht, es war nur die Auswahl und die Mischung auf beiden Spalten, aber nicht die min A, die der möglichen Zeilen, die max B sind – Luke

+0

Siehe, ob meine Bearbeitung die Arbeit für Sie erledigt. Entschuldigen Sie die Formatierung. –

+0

Lassen Sie mich es jetzt ausprobieren – Luke

0

könnten Sie benötigen min über den max für B

select min(A), B, C 
    from my_table 
    where (B, C) in (
    select B, max(C) 
    from my_table 
    group by B 
) 
group by B,C 
+0

Schließen, änderte ich es ein wenig und es gab mir ein Ergebnis, nicht multiple – Luke

+0

Ich habe die Antwort hinzugefügt Gruppe für für eine Rückkehr – scaisEdge

+0

@Luke gut, wenn meine Antwort richtig ist bitte oder wenn es nützlich ist markiere es als akzeptiert ..oder bewerte es richtig. Siehe hier http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – scaisEdge

Verwandte Themen