Maison > Questions et réponses > le corps du texte
P粉4810352322023-08-29 16:08:14
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 :
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;
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 :
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;
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.