P粉4810352322023-08-29 16:08:14
首先,讓我修正一下你的說法;那不是Navicat查詢,那是一個MySQL查詢。現在,這是兩個不同的東西。 MySQL是一個資料庫,Navicat是一個工具 - 類似於MySQL Workbench、PHPMyAdmin或SQLyog等其他工具。它是為了讓你可以透過圖形介面執行資料庫功能。
接下來,我將給出兩個查詢,你可以根據你的MySQL版本使用其中一個。第一個查詢如下:
SELECT p1.idproduct, p1.exp_date, p1.selling_price FROM product_exp_date p1 JOIN ( SELECT idproduct, MIN(exp_date) AS minexp FROM product_exp_date GROUP BY idproduct ) AS p2 ON p1.idproduct=p2.idproduct AND p1.exp_date=p2.minexp ORDER BY p1.idproduct;
你應該可以在任何版本的MySQL或MariaDB中執行上面的查詢。這個查詢的想法是透過idproduct
分組來取得最小的exp_date
,然後將其作為子查詢,再次與product
表進行連接,以符合這兩個提取的值,以便我們可以提取selling_price
。
第二個查詢:
SELECT idproduct, exp_date, selling_price FROM ( SELECT idproduct, exp_date, selling_price, ROW_NUMBER() OVER (PARTITION BY idproduct ORDER BY exp_date) rn FROM product_exp_date ) AS p1 WHERE rn=1;
這個查詢只能在支援視窗函數的MySQL v8 或MariaDB 10.2 (以上)上運行。與先前的查詢相比,想法有點不同,這裡我們將專注於根據特定條件產生ROW_NUMBER()
,然後將其作為子查詢,並只添加一個WHERE
子句。與先前的查詢相比,這不需要JOIN
操作。
你可以看到,我沒有考慮到product
表,因為我沒有看到它在你的原始查詢中被使用,但如果你確實需要將其連接起來,而且你無法弄清楚如何做到,只要給我留言,我會看看我能做什麼。