selection du plus proche de manière inférieur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : selection du plus proche de manière inférieur

Re: selection du plus proche de manière inférieur

par Mazarini » 18 févr. 2011, 09:14

Bonjour,
SELECT id_tarif_log, cout_cmd, cout_prod, date_MAJ
FROM tarif_logistique
WHERE YEAR(date_MAJ)  < '$annee'
        OR (
             YEAR(date_MAJ) = '$annee'
            AND MONTH(date_MAJ) <= '$mois')
order by date_MAJ DESC
limit 1
Ca me semble plus simple. Les requêtes imbriquées sont à éviter.

Re: selection du plus proche de manière inférieur

par xaxa » 17 févr. 2011, 17:47

Avec cette requête, je ne pense que j'aurai le problème dont parle macgawel du moins je ne crois pas et je n'espère pas ..

Re: selection du plus proche de manière inférieur

par xaxa » 17 févr. 2011, 17:39

Cette requête fonctionne bien également
SELECT id_tarif_log, cout_cmd, cout_prod, date_MAJ
  FROM tarif_logistique
 WHERE date_MAJ = (SELECT max(date_MAJ)
                     FROM tarif_logistique
                    WHERE YEAR(date_MAJ)  < '$annee'
                               OR (
                                    YEAR(date_MAJ) = '$annee'
                                    AND MONTH(date_MAJ) <= '$mois'
                                )
                     )
 

Re: selection du plus proche de manière inférieur

par macgawel » 17 févr. 2011, 17:34

LIMIT 1 te sors le premier enregistrement rendu (et pas trouvé). La nuance est subtile, mais importante...

=>
1. Requête de base => SELECT champs FROM table WHERE condition

2. On veut du plus récent au plus vieux => SORT BY champtri DESC

3. On ne veut que le premier => LIMIT 1


Rien à voir, mais ta requête risque de poser problème :
SELECT cout_cmd AS cmd, cout_prod AS prod
FROM tarif_logistique
WHERE YEAR(date_MAJ) <= '$annee_cmd'
AND MONTH(date_MAJ) <= '$mois_cmd'
Les articles modifiés entre le <Mois demandé> + 1 et décembre des années précédentes ne sont pas inclus.
En clair, si tu passes la requête le premier janvier 2011, tu ne trouveras pas les modifications deu 31 décembre 2010...

Re: selection du plus proche de manière inférieur

par xTG » 17 févr. 2011, 17:30

Donc tu peux faire ainsi :
avec $date = $annee_cmd . "-" . $mois_cmd . "-01";
SELECT cout_cmd AS cmd, cout_prod AS prod
FROM tarif_logistique
WHERE date_MAJ <= $date
LIMIT 1
Cela devrait te renvoyer la bonne date. :)

Re: selection du plus proche de manière inférieur

par Invité » 17 févr. 2011, 16:21

euh je recherche la date la plus proche de 2011-04-01 de manière inférieur donc ce sera celle de 2011-03.
La mon bout de code selectionne les lignes ou la date est inférieur a celle que je donne mais il me les donne toutes. Je ne veux que la plus proche.
En utilisant LIMIT 1 ; il me retourne qu'un seul résultat mais le premier qu'il a trouvé et par exemple dans mon cas il ne retourne pas la valeur inférieur la plus proche de ce que jai mis en entrée

Re: selection du plus proche de manière inférieur

par xTG » 17 févr. 2011, 16:10

Considères-tu rechercher la date la plus proche de 2011-04-01 ? Ou bien en fin de mois ?
Ensuite pour ne retourner qu'un certain nombre d'enregistrements il y a LIMIT pour MySQL/PostgreSQL.
Pour Oracle par contre je ne sais pas si c'est ce que tu utilises. :)

selection du plus proche de manière inférieur

par xaxa » 17 févr. 2011, 16:05

Bonjour. J'ai une table :

Code : Tout sélectionner

id_tarif_log cout_cmd cout_prod date_MAJ 1 2.2 0.15 2011-02-17 00:00:00 2 12 45 2011-03-17 14:37:58
Je donne une date et je veux sélectionner la ligne dont la date est la plus proche de manière inférieur.
La si je donne en entré 2011 et 04 ( pour le mois) je veux que la deuxième ligne.

Comment dois je faire cela?

moi je faisais
SELECT cout_cmd as cmd, cout_prod as prod
FROM tarif_logistique
WHERE YEAR(date_MAJ) <= '$annee_cmd'
AND MONTH(date_MAJ) <= '$mois_cmd'
Mais évidement, ca me sélectionne toutes les lignes inférieur aux conditions. Moi je voudrai que la plus proche de manière inférieur

Merci de votre aide