gpt4 book ai didi

mysql - MySQL 中带有 GROUP View 的子查询

转载 作者:行者123 更新时间:2023-11-30 00:11:20 25 4
gpt4 key购买 nike

我正在尝试使用以下代码构建 View :

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`;

如您所见,它严重依赖于 Messwerte 中的 ORDER 指令,它将根据该指令进行分组。但 View 中不允许使用子查询。

假设这是我的源表:

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

这就是我想要的:

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

我尝试使用多个VIEW,但ORDER总是丢失,并且我没有得到NR最高的条目。

有人可以告诉我如何解决这个问题吗?

提前致谢!

最佳答案

 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 |
+----+----------------+---------------------+----------+

或更慢,但没有子查询...

 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 |
+----+----------------+---------------------+----------+

关于mysql - MySQL 中带有 GROUP View 的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com