Tapis berbilang nilai id menggunakan Navicat dalam pangkalan data MySQL
P粉285587590
P粉285587590 2023-08-28 17:09:38
0
1
614
<p>Saya perlu menapis data menggunakan tarikh tamat tempoh terkini dan harga jualan tanpa mengulangi id_product, saya cuba menyelesaikan masalah ini tetapi saya tidak dapat mencari cara yang betul untuk melakukannya</p> <p>Ini ialah pertanyaan dan keputusan Navicat</p> <pre class="brush:php;toolbar:false;">SELECT product_exp_date.idproduct, product_exp_date.exp_date, product_exp_date.selling_price DARI produk SERTAI DALAM product_exp_date HIDUP product.idproduct = product_exp_date.idproduct KUMPULAN OLEH 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</pra> <p>Saya telah mencuba cara ini</p> <pre class="brush:php;toolbar:false;">KUMPULAN OLEH product_exp_date.idproduct</pre> <p>Tetapi ia memberi saya hasil yang berbeza</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</pra> <p>Tetapi saya perlu mendapatkan keputusan ini</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</pra> <p>Senarai Produk</p> <pre class="brush:php;toolbar:false;">productid product_name 5A 6B 7 C 8 D</pra> <p>Product_EXP_DateTable</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</pra> <p>Kadangkala pertanyaan saya mempunyai beberapa ralat, bagaimanapun saya memerlukan bantuan untuk menyelesaikan masalah ini, Terima kasih. </p>
P粉285587590
P粉285587590

membalas semua(1)
P粉481035232

Pertama sekali, izinkan saya membetulkan anda; itu bukan pertanyaan Navicat, itu adalah pertanyaan MySQL. Sekarang, ini adalah dua perkara yang berbeza. MySQL ialah pangkalan data, Navicat ialah alat - serupa dengan alatan lain seperti MySQL Workbench, PHPMyAdmin atau SQLyog. Ia direka untuk membolehkan anda melaksanakan fungsi pangkalan data melalui antara muka grafik.

Seterusnya, saya akan memberikan dua pertanyaan, anda boleh menggunakan salah satu daripadanya bergantung pada versi MySQL anda. Pertanyaan pertama adalah seperti berikut:

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;

Anda sepatutnya boleh menjalankan pertanyaan di atas dalam mana-mana versi MySQL atau MariaDB. Idea pertanyaan ini adalah melalui idproduct分组获取最小的exp_date,然后将其作为子查询,再次与product表进行连接,以匹配这两个提取的值,以便我们可以提取selling_price.

Pertanyaan kedua:

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;

Pertanyaan ini hanya boleh dijalankan pada MySQL v8+ atau MariaDB 10.2+ (dan ke atas) yang menyokong fungsi tetingkap. Idea ini sedikit berbeza berbanding dengan pertanyaan sebelumnya, di sini kita akan menumpukan pada penjanaan ROW_NUMBER(),然后将其作为子查询,并只添加一个WHERE子句。与之前的查询相比,这不需要JOIN tindakan berdasarkan syarat tertentu.

Anda dapat melihat bahawa saya tidak mengambil kira jadual product kerana saya tidak melihatnya digunakan dalam pertanyaan asal anda, tetapi jika anda perlu menggabungkannya bersama-sama dan anda tidak dapat memikirkan cara melakukannya, hanya berikan saya akan tinggalkan mesej dan saya akan lihat apa yang boleh saya lakukan.

Demo biola

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan