Rumah  >  Soal Jawab  >  teks badan

Tapis berbilang nilai id menggunakan Navicat dalam pangkalan data MySQL

<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粉285587590P粉285587590388 hari yang lalu561

membalas semua(1)saya akan balas

  • P粉481035232

    P粉4810352322023-08-29 16:08:14

    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

    balas
    0
  • Batalbalas