簡體   English   中英

MySQL視圖中帶有GROUP的子查詢

[英]Subquery in MySQL View with GROUP

我正在嘗試使用以下代碼構建視圖:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM