Rolf B: MySQL: Ganzen Satz finden zu MIN( tag )

Beitrag lesen

Hallo Rolf,

SELECT adress_id,
       ort, tag, uhr,
       ROW_NUMBER() OVER(PARTITION BY adress_id 
                         ORDER BY tag, uhr) as term_row
FROM termine
WHERE term_row = 1
ORDER BY tag, uhr

geht nicht. Man kann term_row nicht im WHERE ansprechen und man kann keine Window-Funktion im WHERE verwenden.

Was geht, ist eine CTE (Common Table Expression) - ab Maria DB 10.2.1:

WITH terminsort AS (
   SELECT adress_id, ort, tag, uhr,
          ROW_NUMBER() OVER(PARTITION BY adress_id 
                            ORDER BY tag, uhr) as zeile
   FROM termine
)
SELECT adress_id, ort, tag, uhr
FROM terminsort
WHERE zeile = 1

oder, wenn man noch eine Alt-Maria, mit einem SELECT als FROM-Angabe. MYSQL 5.x kennt keine Window-Funktionen, da bleibt's beim Selfjoin.

SELECT ts.adress_id, ts.ort, ts.tag, ts.uhr
FROM (SELECT adress_id, ort, tag, uhr,
       ROW_NUMBER() OVER(PARTITION BY adress_id 
                         ORDER BY tag, uhr) as zeile
      FROM termine) ts
WHERE ts.zeile = 1

Rolf

--
sumpsi - posui - obstruxi