2017-11-02 3 views
-3

Ich habe eine Tabelle, die Daten in aufsteigender Reihenfolge in Col2, Col3 und absteigend in Col4 enthält. So eine Beispieltabelle ist folgende:MySQL finde die erste von jeder "Gruppe"

+------+------+------+------+ 
    | Col1 | Col2 | Col3 | Col4 | 
    +------+------+------+------+ 
    | 11 | a | b | 1 | 
    +------+------+------+------+ 
    | 21 | a | b | 0 | 
    +------+------+------+------+ 
    | 31 | d | c | 0 | 
    +------+------+------+------+ 
    | 41 | a | e | 0 | 
    +------+------+------+------+ 
    | 22 | f | a | 1 | 
    +------+------+------+------+ 
    | 23 | f | a | 0 | 
    +------+------+------+------+ 

Das Ergebnis ich erreichen will ist es, die Daten zu erhalten, die keine Duplikate in Col2 und Col3 haben wie auch von denen, die Duplikate haben nur diejenigen abrufen mit „1 "in Kol4. Also unter Verwendung der obigen Tabelle sollte das Ergebnis sein:

+------+------+------+------+ 
    | Col1 | Col2 | Col3 | Col4 | 
    +------+------+------+------+ 
    | 11 | a | b | 1 | 
    +------+------+------+------+ 
    | 31 | d | c | 0 | 
    +------+------+------+------+ 
    | 41 | a | e | 0 | 
    +------+------+------+------+ 
    | 22 | f | a | 1 | 
    +------+------+------+------+ 

Ist dies in MySQL möglich?

+0

scheint durchaus möglich. Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry

Antwort

3

Eine Abfrage mit GROUP BY mit MIN() und MAX() scheint das gewünschte Ergebnis zu erzeugen.

CREATE TABLE Table1 
    (`Col1` int, `Col2` varchar(1), `Col3` varchar(1), `Col4` int); 

INSERT INTO Table1 
    (`Col1`, `Col2`, `Col3`, `Col4`) 
VALUES 
    (11, 'a', 'b', 1), 
    (21, 'a', 'b', 0), 
    (31, 'd', 'c', 0), 
    (41, 'a', 'e', 0), 
    (22, 'f', 'a', 1), 
    (23, 'f', 'a', 0); 
select min(`Col1`) Col1, `Col2`, `Col3`, max(`Col4`) 
from Table1 
group by `Col2`, `Col3` 
order by `Col2`, `Col3`; 
 
Col1 | Col2 | Col3 | max(`Col4`) 
---: | :--- | :--- | ----------: 
    11 | a | b |   1 
    41 | a | e |   0 
    31 | d | c |   0 
    22 | f | a |   1 

dbfiddle here

Verwandte Themen