Christian Kruse: ORDER BY vor GROUP by

Beitrag lesen

Hallo 1211chef,

ich brauche für die ausgabe jeweils NUR den jüngsten datensatz pro gruppe, weil immer im jüngsten ds eine info steht die ich brauche. ansonsten wär´s wurscht. wie mach ich das am einfachsten?

Für dieses Problem gibt es keine einfache Lösung. Wenn wir davon ausgehen, dass die Kombination bla1+bla2, time eindeutig ist, gibt es eine Lösung mit einem Subquery und einem Join:

CREATE TABLE t1 (
  id INTEGER PRIMARY KEY AUTO_INCREMENT,
  v1 INTEGER NOT NULL,
  v2 INTEGER NOT NULL,
  time TIMESTAMP
);

INSERT INTO t1 (v1, v2, time) VALUES (1234, 1234, NOW());
INSERT INTO t1 (v1, v2, time) VALUES (1234, 1234, NOW());
INSERT INTO t1 (v1, v2, time) VALUES (1235, 1235, NOW());
INSERT INTO t1 (v1, v2, time) VALUES (1235, 1235, NOW());

SELECT t1.* FROM (SELECT v1+v2 combined_t, MAX(time) time FROM t1 GROUP BY v1+v2) grp INNER JOIN t1 ON t1.v1+t1.v2 = combined_t AND t1.TIME = grp.time;

Wenn nicht, dann hast du ein Problem, dann kannst du da nämlich schweres Geschütz auffahren ;)

LG,
CK