{MySQL} Sélection d'une liste de prix entre d
lodan
-
lodan -
lodan -
Bonjour,
J'ai une table "catalogue" de produits défini comme ceci :
Elle contient les informations suivantes :
Je cherche à faire une requête me donnant le tarif à appliquer
Le résultat devant me donner les informations suivantes :
Si je fait une requête en utilisant DATEDIFF()
J'obtiens comme résultat ;
Comment faire pour que le prix du produit 1235 soit 38 en prenant l'écart le plus petit.
Si j'ajoute à ma requete un
ça ne fonctionne pas.
Merci d'avance pour votre aide
J'ai une table "catalogue" de produits défini comme ceci :
Code catalogue code produit date_debut date_fin prix
Elle contient les informations suivantes :
Code catalogue = 1 code produit = 1235 date_debut = 2009-01-01 date_fin = 2009-12-31 prix = 78 Code catalogue = 2 code produit = 1235 date_debut = '2009-07-30' date_fin = '2009-08-15' prix = 38 Code catalogue = 1 code produit = 3526 date_debut = '2009-05-01' date_fin = '2009-12-31' prix = 45
Je cherche à faire une requête me donnant le tarif à appliquer
Le résultat devant me donner les informations suivantes :
Code catalogue = 2 code produit = 1235 date_debut = '2009-07-30' date_fin = '2009-08-15' prix = 38 Code catalogue = 1 code produit = 3526 date_debut = '2009-05-01' date_fin = '2009-12-31' prix = 45
Si je fait une requête en utilisant DATEDIFF()
SELECT code_produit, date_debut, date_fin, DATEDIFF(CURDATE(), date_debut) AS ecart, prix FROM catalogues WHERE ( CURDATE( ) BETWEEN date_debut AND date_fin OR CURDATE( ) >= date_debut AND date_fin = '0000-00-00' )
J'obtiens comme résultat ;
code produit = 1235 date_debut = 2009-01-01 date_fin = 2009-12-31 ecart = 215 prix = 78 Code catalogue = 2 code produit = 1235 date_debut = '2009-07-30' date_fin = '2009-08-15' ecart = 5 prix = 38 Code catalogue = 1 code produit = 3526 date_debut = '2009-05-01' date_fin = '2009-12-31' ecart 95 prix = 45
Comment faire pour que le prix du produit 1235 soit 38 en prenant l'écart le plus petit.
Si j'ajoute à ma requete un
GROUP BY produit HAVING MIN(ecart)
ça ne fonctionne pas.
Merci d'avance pour votre aide
A voir également:
- {MySQL} Sélection d'une liste de prix entre d
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Historique prix amazon - Guide
12 réponses
Bonjour et merci,
Oui sur le critère date et sur l'unicité du produit. En fait le tarif de certains produits peut varier dans le temps en fonction de la saisonnalité.
Oui sur le critère date et sur l'unicité du produit. En fait le tarif de certains produits peut varier dans le temps en fonction de la saisonnalité.
Bon j'ai du mal a comprendre
1-c'est quoi tes clefs primaires?
2-tu cherche le prix connaissant la date et le produit?ou juste la date et tu cherche tt les produit qui ont un prix valide a la date recherché?
1-c'est quoi tes clefs primaires?
2-tu cherche le prix connaissant la date et le produit?ou juste la date et tu cherche tt les produit qui ont un prix valide a la date recherché?
pk t'utilise datediff??
a tu essayé symplemant
SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
si ca ne marche pas ca devrai venir du format utilisée pour les date
dans ce cas la utilise to_date
a tu essayé symplemant
SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
si ca ne marche pas ca devrai venir du format utilisée pour les date
dans ce cas la utilise to_date
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si j'utilise ta requete, je me retrouve avec 2 résultats pour le produits 1235
Or je n'en veux qu'un, celui dont la date de début est le plus proche de la date du jour.
Or je n'en veux qu'un, celui dont la date de début est le plus proche de la date du jour.
ah ok je voie mainteant!
essaye ca :
SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
order desc by date_debut
en ajoutant une condition pour sélectionner que la première ligne des résultat je l'ai déjà utilisé mais je m'en rappel plus...
essaye ca :
SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
order desc by date_debut
en ajoutant une condition pour sélectionner que la première ligne des résultat je l'ai déjà utilisé mais je m'en rappel plus...
voila ca me revien :)
c'est ROWNUM !!
=>SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
where rownum<=1
order desc by date_debut
c'est ROWNUM !!
=>SELECT code_produit, date_debut, date_fin, , prix
FROM catalogues
WHERE
sysdate
BETWEEN date_debut
AND date_fin
where rownum<=1
order desc by date_debut
ça c'est bon pour oracle.
En mysql c'est "limit 1"
Mais, il ne faut pas qu'il me prenne un seul enregistrement.
Il me faut effectivement 1 seule ligne par produit, mais tout le catalogue tout de même.
En mysql c'est "limit 1"
Mais, il ne faut pas qu'il me prenne un seul enregistrement.
Il me faut effectivement 1 seule ligne par produit, mais tout le catalogue tout de même.
Pardon, je n'ai pas été clair, je le vois.
Oui, je veux tous les prix valides aujourd'hui et un seul prix valide par produit.
Oui, je veux tous les prix valides aujourd'hui et un seul prix valide par produit.
La solution que j'ai trouvé est de passer par 2 requêtes imbriquées et en prenant les écarts entre la date du jour et la date de début de catalogue
Et ça marche
Merci pour l'aide
SELECT code_produit, prix (SELECT code_produit, MIN(DATEDIFF(curdate(), date_debut)) AS mini FROM catalogues WHERE ( CURDATE( ) BETWEEN date_debut AND date_fin OR CURDATE( ) >= date_debut AND date_fin = '0000-00-00') GROUP BY code_produit) AS catalogues_filtre ON catalogues.code_produit = catalogues_filtre.code_produit WHERE catalogues.code_produit = catalogues_filtre.code_produit AND mini = DATEDIFF(curdate(), date_debut)
Et ça marche
Merci pour l'aide