Filtrer plusieurs valeurs d'identifiant à l'aide de Navicat dans la base de données MySQL
P粉285587590
2023-08-28 17:09:38
<p>Je dois filtrer les données en utilisant la date d'expiration et le prix de vente les plus récents sans répéter l'id_product. J'ai essayé de résoudre ce problème mais je ne trouve pas la bonne façon de le faire</p>
<p>Voici la requête et les résultats Navicat</p>
<pre class="brush:php;toolbar:false;">SELECT
product_exp_date.idproduct,
produit_exp_date.exp_date,
product_exp_date.sell_price
DEPUIS
produit
JOINTURE INTERNE
date_exp_produit
SUR
produit.idproduct = product_exp_date.idproduct
PAR GROUPE
product_exp_date.exp_date</pre>
<pre class="brush:php;toolbar:false;">idproduct exp_date sell_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</pré>
<p>J'ai essayé de cette façon</p>
<pre class="brush:php;toolbar:false;">GROUPE PAR
product_exp_date.idproduct</pre>
<p>Mais cela me donne des résultats différents</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date sell_price
5 2022-06-09 350
6 2023-06-08 150
7 2022-07-01 380
8 2022-11-01 300</pré>
<p>Mais j'ai besoin d'obtenir ce résultat</p>
<pre class="brush:php;toolbar:false;">idproduct exp_date sell_price
5 2022-06-08 370
6 2022-10-08 140
7 2022-07-01 380
8 2022-11-01 300</pré>
<p>Liste de produits</p>
<pre class="brush:php;toolbar:false;">productid nom_produit
5A
6B
7C
8 D≪/pré>
<p>Product_EXP_DateTable</p>
<pre class="brush:php;toolbar:false;">idproduct_exp_date idproduct exp_date sell_price
1 5 2022-06-09 350
2 6 2023-06-08 150
3 5 2022-06-08 370
4 5 20/09/2022 450
5 6 2022-10-08 140
6 7 2022-07-01 380
7 8 2022-11-01 300</pré>
<p>Parfois, ma requête comporte des erreurs, de toute façon j'ai besoin d'aide pour résoudre ce problème,
Merci. </p>
Tout d'abord, permettez-moi de vous corriger : ce n'est pas une requête Navicat, c'est une requête MySQL. Maintenant, ce sont deux choses différentes. MySQL est une base de données, Navicat est un outil similaire à d'autres outils comme MySQL Workbench, PHPMyAdmin ou SQLyog. Il est conçu pour vous permettre d'exécuter des fonctions de base de données via une interface graphique.
Ensuite, je vais donner deux requêtes, vous pouvez en utiliser une en fonction de votre version de MySQL. La première requête est la suivante :
Vous devriez pouvoir exécuter la requête ci-dessus dans n'importe quelle version de MySQL ou MariaDB. L'idée decette requête passe par
idproduct
分组获取最小的exp_date
,然后将其作为子查询,再次与product
表进行连接,以匹配这两个提取的值,以便我们可以提取selling_price
.Deuxième requête :
Cette requête ne peut être exécutée que sur MySQL v8+ ou MariaDB 10.2+ (et supérieur) qui prennent en charge les fonctions de fenêtre. L'idée est un peu différente par rapport à la requête précédente, nous allons ici nous concentrer sur la génération d'
ROW_NUMBER()
,然后将其作为子查询,并只添加一个WHERE
子句。与之前的查询相比,这不需要JOIN
actions basées sur des conditions spécifiques.Vous pouvez voir que je n'ai pas pris en compte la table
product
car je ne l'ai pas vue utilisée dans votre requête d'origine, mais si vous avez besoin de la joindre et que vous ne savez pas comment le faire, donne juste, je laisserai un message et je verrai ce que je peux faire.Démo violon