簡體   English   中英

MySQL-在嵌套語句中選擇最高修訂

[英]MySQL - Select max revision within nested statement

我想從mysql表中選擇最大修訂版圖紙。 除了嵌套的select語句(?)外,我什么也不能使用(所有條件應在“ SELECT * FROM drawings ”之后)。

因此,“圖紙”表為:

+----+---------+-------------+-------+---------+---------------------+
| id | number  | title       |format | revision| date                |
+----+---------+-------------+-------+---------+---------------------+
| 100|  022588 |  some title | dwg   | 1       | 2016-01-07 08:00:00 |
| 101|  022588 |  some title | dwg   | 2       | 2016-01-07 08:01:00 |
| 103|  022588 |  some title | pdf   | 3       | 2016-01-07 08:15:32 |
| 104|  022588 |  some title | dwg   | 3       | 2016-01-07 09:10:32 |
+----+---------+-------------+-------+---------+---------------------+

我想得到的結果是(相同編號,相應格式的最大修訂版本):

| 103|  022588 |  some title | pdf   | 3       | 2016-01-07 08:15:32 |
| 104|  022588 |  some title | dwg   | 3       | 2016-01-07 09:10:32 |

再一次,我必須(必須)以“ SELECT * FROM drawings WHERE ......”開始查詢。

我嘗試的最后一件事是:

SELECT * FROM `drawings` WHERE `revision` IN ( SELECT MAX(`revision`) FROM `drawings` GROUP BY `number`, `format` ) GROUP BY `number`, `format` ORDER BY `number` DESC;

...我得到了正確的pdf和錯誤/最低的dwg(從1改為3)。

如果我正確閱讀了您的問題,那么您希望從每個format組中具有最大修訂號的圖紙中獲取圖紙。 一種方法是使用子查詢來標識格式及其最大修訂版本,然后使用該子查詢來限制原始drawings表。

SELECT t1.*
FROM drawings t1
INNER JOIN
(
    SELECT format, MAX(revision) AS revision
    FROM drawings
    GROUP BY format
) t2
    ON t1.format = t2.format AND
       t1.revision = t2.revision

請點擊以下鏈接以獲取正在運行的演示:

SQLFiddle

您可以在WHERE子句中使用相關的子查詢:

SELECT d1.*
FROM `drawings` d1
WHERE `revision` = (
    SELECT MAX(`revision`)
    FROM `drawings` d2
    WHERE d2.`number` = d1.`number`
      AND d2.`format` = d1.`format`
) 
ORDER BY `number` DESC;

在SQLFiddle上查看

對於具有最高修訂版本的numberformat每種組合,查詢將只返回一行。 我使用該組合是因為您的原始查詢是: GROUP BY number, format 但是您還寫道:“適用格式的最大修訂版”。 在這種情況下,您應該使用:

SELECT d1.*
FROM `drawings` d1
WHERE `revision` = (
    SELECT MAX(`revision`)
    FROM `drawings` d2
    WHERE d2.`format` = d1.`format`
) 
ORDER BY `number` DESC;

我建議:

從圖形d1中選擇d1。*,其中d1.id在其中(從圖形d2中按d2.format選擇max(d2.id))

使用PrimaryKey的查詢速度更快。 您將獲得最后的記錄修訂。

這是查詢:

select *
from drawings a inner join (select number, title, format, 
                            max(revision) as revision
                            from drawings 
                            group by number, title, format) b 
on a.number = b.number and a.title = b.title and a.format = b.format
and a.revision = b.revision

暫無
暫無

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

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