I'm trying to build a view using this code:
SELECT *
FROM `ergebnis`
LEFT JOIN (
SELECT `NR` AS `MESSWERT_NR`, `ERGEBNISNUMMER`,`TESTSTEPREIHENFOLGE`, `MESSBEZEICHNUNG`, `STEP_BEZEICHNUNG`, `MESSWERT`, `MESSERGEBNIS`
FROM (
SELECT *
FROM `messwerte`
ORDER BY `NR` DESC
) AS `f_messwerte`
GROUP BY `ERGEBNISNUMMER`,`TESTSTEPREIHENFOLGE`
ORDER BY `ERGEBNISNUMMER`,`TESTSTEPREIHENFOLGE`
) AS `t_messwerte`
ON (`t_messwerte`.`ERGEBNISNUMMER` = `ergebnis`.`NR`)
ORDER BY `NR` DESC,`TESTSTEPREIHENFOLGE`;
As you can see, it relies heavily on the ORDER instruction in Messwerte on which it will be grouped by. But Subqueries are not allowed in VIEWs.
Assuming this is my source table:
NR ERGEBNISNUMMER TESTSTEPREIHENFOLGE MESSWERT
1 1 1 80
2 1 1 86
3 1 2 306
4 1 2 302
5 1 2 304
6 1 3 0.2
7 2 1 81
8 2 1 79
9 2 1 80
10 2 2 305
11 2 2 301
12 2 3 0.1
13 2 3 0.3
This is what I want:
NR ERGEBNISNUMMER TESTSTEPREIHENFOLGE MESSWERT
13 2 3 0.3
11 2 2 301
9 2 1 80
6 1 3 0.2
5 1 2 304
2 1 1 86
I tried using multiple VIEWs, but the ORDER was alway lost, and I didn't get the entry with the highest NR.
Could somebody give me a hint on how to solve this?
Thanks in advance!
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(NR INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,ERGEBNISNUMMER INT NOT NULL
,TESTSTEPREIHENFOLGE INT NOT NULL
,MESSWERT DECIMAL(5,2) NOT NULL
);
INSERT INTO my_table VALUES
(1 ,1 ,1 ,80),
(2 ,1 ,1 ,86),
(3 ,1 ,2 ,306),
(4 ,1 ,2 ,302),
(5 ,1 ,2 ,304),
(6 ,1 ,3 ,0.2),
(7 ,2 ,1 ,81),
(8 ,2 ,1 ,79),
(9 ,2 ,1 ,80),
(10 ,2 ,2 ,305),
(11 ,2 ,2 ,301),
(12 ,2 ,3 ,0.1),
(13 ,2 ,3 ,0.3);
SELECT x.*
FROM my_table x
JOIN
( SELECT ERGEBNISNUMMER
, TESTSTEPREIHENFOLGE
, MAX(NR) max_nr
FROM my_table
GROUP
BY ERGEBNISNUMMER
, TESTSTEPREIHENFOLGE
) y
ON y.ERGEBNISNUMMER = x.ERGEBNISNUMMER
AND y.TESTSTEPREIHENFOLGE = x.TESTSTEPREIHENFOLGE
AND y.max_nr = x.NR;
+----+----------------+---------------------+----------+
| NR | ERGEBNISNUMMER | TESTSTEPREIHENFOLGE | MESSWERT |
+----+----------------+---------------------+----------+
| 2 | 1 | 1 | 86.00 |
| 5 | 1 | 2 | 304.00 |
| 6 | 1 | 3 | 0.20 |
| 9 | 2 | 1 | 80.00 |
| 11 | 2 | 2 | 301.00 |
| 13 | 2 | 3 | 0.30 |
+----+----------------+---------------------+----------+
or slower, but no subquery...
SELECT x.*
FROM my_table x
LEFT
JOIN my_table y
ON y.ERGEBNISNUMMER = x.ERGEBNISNUMMER
AND y.TESTSTEPREIHENFOLGE = x.TESTSTEPREIHENFOLGE
AND y.NR > x.NR
WHERE y.NR IS NULL;
+----+----------------+---------------------+----------+
| NR | ERGEBNISNUMMER | TESTSTEPREIHENFOLGE | MESSWERT |
+----+----------------+---------------------+----------+
| 2 | 1 | 1 | 86.00 |
| 5 | 1 | 2 | 304.00 |
| 6 | 1 | 3 | 0.20 |
| 9 | 2 | 1 | 80.00 |
| 11 | 2 | 2 | 301.00 |
| 13 | 2 | 3 | 0.30 |
+----+----------------+---------------------+----------+
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.