在MySQL資料庫中使用Navicat過濾多個id值
P粉285587590
2023-08-28 17:09:38
<p>我需要使用最近的到期日期和銷售價格來過濾數據,而不重複 id_product,我嘗試解決這個問題,但我無法找到正確的方法來做到這一點</p>
<p>這是 Navicat 查詢和結果</p>
<pre class="brush:php;toolbar:false;">SELECT
product_exp_date.idproduct,
product_exp_date.exp_date,
product_exp_date.selling_price
FROM
product
INNER JOIN
product_exp_date
ON
product.idproduct = product_exp_date.idproduct
GROUP BY
product_exp_date.exp_date</pre>
<pre class="brush:php;toolbar:false;">idproduct exp_date selling_price
8 2022-11-01 300
5 2022-06-08 370
5 2022-06-09 350
7 2022-07-01 380
5 2022-09-20 450
6 2022-10-08 140
6 2023-06-08 150</pre>
<p>我已經嘗試過這種方式</p>
<pre class="brush:php;toolbar:false;">GROUP BY
product_exp_date.idproduct</pre>
<p>但它給了我不同的結果</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date selling_price
5 2022-06-09 350
6 2023-06-08 150
7 2022-07-01 380
8 2022-11-01 300</pre>
<p>但我需要得到這個結果</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date selling_price
5 2022-06-08 370
6 2022-10-08 140
7 2022-07-01 380
8 2022-11-01 300</pre>
<p>產品表</p>
<pre class="brush:php;toolbar:false;">productid product_name
5 A
6 B
7 C
8 D</pre>
<p>產品_EXP_日期表</p>
<pre class="brush:php;toolbar:false;">idproduct_exp_date idproduct exp_date selling_price
1 5 2022-06-09 350
2 6 2023-06-08 150
3 5 2022-06-08 370
4 5 2022-09-20 450
5 6 2022-10-08 140
6 7 2022-07-01 380
7 8 2022-11-01 300</pre>
<p>有時我的查詢有一些錯誤,無論如何我需要幫助來解決這個問題,
謝謝。 </p>
首先,讓我修正一下你的說法;那不是Navicat查詢,那是一個MySQL查詢。現在,這是兩個不同的東西。 MySQL是一個資料庫,Navicat是一個工具 - 類似於MySQL Workbench、PHPMyAdmin或SQLyog等其他工具。它是為了讓你可以透過圖形介面執行資料庫功能。
接下來,我將給出兩個查詢,你可以根據你的MySQL版本使用其中一個。第一個查詢如下:
你應該可以在任何版本的MySQL或MariaDB中執行上面的查詢。這個查詢的想法是透過
idproduct
分組來取得最小的exp_date
,然後將其作為子查詢,再次與product
表進行連接,以符合這兩個提取的值,以便我們可以提取selling_price
。第二個查詢:
這個查詢只能在支援視窗函數的MySQL v8 或MariaDB 10.2 (以上)上運行。與先前的查詢相比,想法有點不同,這裡我們將專注於根據特定條件產生
ROW_NUMBER()
,然後將其作為子查詢,並只添加一個WHERE
子句。與先前的查詢相比,這不需要JOIN
操作。你可以看到,我沒有考慮到
product
表,因為我沒有看到它在你的原始查詢中被使用,但如果你確實需要將其連接起來,而且你無法弄清楚如何做到,只要給我留言,我會看看我能做什麼。示範fiddle
#