Filtrer plusieurs valeurs d'identifiant à l'aide de Navicat dans la base de données MySQL
P粉285587590
P粉285587590 2023-08-28 17:09:38
0
1
500

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

Voici la requête et les résultats Navicat

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
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 

J'ai essayé de cette façon

GROUPE PAR product_exp_date.idproduct

Mais cela me donne des résultats différents

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 

Mais j'ai besoin d'obtenir ce résultat

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 

Liste de produits

productid nom_produit 5A 6B 7C 8 D≪/pré> 

Product_EXP_DateTable

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 

Parfois, ma requête comporte des erreurs, de toute façon j'ai besoin d'aide pour résoudre ce problème, Merci.

P粉285587590
P粉285587590

répondre à tous (1)
P粉481035232

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 paridproduct分组获取最小的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子句。与之前的查询相比,这不需要JOINactions basées sur des conditions spécifiques.

Vous pouvez voir que je n'ai pas pris en compte la tableproductcar 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

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!