Multiples champs liés aux dates

Multiples champs liés aux dates - SQL/NoSQL - Programmation

Marsh Posté le 12-01-2006 à 14:03:50    

J'ai un pb avec une requete qui doit sélectionner des données dans ma bdd. En fait, certains articles possèdent plusieurs dates d'enregistrements avec chacune un prix différent pour l'article. Il faudrait que je sélectionne l'article où la date d'enregistrement est la plus récente. Merci de m'aider :)

Reply

Marsh Posté le 12-01-2006 à 14:03:50   

Reply

Marsh Posté le 12-01-2006 à 14:17:15    

Il dit qu'il ne voit pas le problème.[:klem3i1]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:28:03    

bah non dsl!mais jsuis pas fort 8-)

Reply

Marsh Posté le 12-01-2006 à 14:28:31    

Oui, mais si tu nous donnes pas plus que ça on va pas pouvoir t'aider.:o
T'as fait quoi pour l'instant?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:31:09    

ma requete est la suivante :  
select no_art,  
         qte_vte,  
         prix_vte,  
         dte_deb,  
         no_tarv  
from bas_tarartv  
where bas_tarartv.no_tarv=0
order by no_art  
 
le probleme est donc qu'un article possède plusieurs dates d'enregistrement. Il faudrait que je récupère la plus récente. C'est plus clair?

Reply

Marsh Posté le 12-01-2006 à 14:32:24    

Tout de suite c'est mieux...;)
 
Quel SGBD?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:35:41    

bah je sais pas trop en fait!lol. Oui je suis un boulet! En tout cas, je travaille sous Excel 2003 directement dans la feuille excel. Ca t'aide?:s

Reply

Marsh Posté le 12-01-2006 à 14:38:28    

[:tibo2002]
 
humm. Essaie ça, p-e :
 
select top 1 no_art,  
         qte_vte,  
         prix_vte,  
         dte_deb,  
         no_tarv  
from bas_tarartv  
where bas_tarartv.no_tarv=0
order by no_art desc


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:42:58    

Cela ne fonctionne pas...Mais le desc a la fin de ta requete est bon?

Reply

Marsh Posté le 12-01-2006 à 14:44:17    

il ne comprend pas le top 1 je suppose?
 
Le desc est bon mais je me suis planté, je voulais trier par date descendante, pas par numéro d'article, j'ai oublié de changer...:D


Message édité par skeye le 12-01-2006 à 14:44:34

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:44:17   

Reply

Marsh Posté le 12-01-2006 à 14:45:35    

C'est bien ça il ne comprend pas le top 1 : bien joué!tu as une autre idée?

Reply

Marsh Posté le 12-01-2006 à 14:48:59    

oui, mais plus complexe...;)
 
Essaie ça :
 

Code :
  1. select no_art, 
  2.          qte_vte, 
  3.          prix_vte, 
  4.          dte_deb, 
  5.          no_tarv 
  6. from bas_tarartv  as t1
  7. where t1.no_tarv=0
  8. and not exists (
  9.    select 1 from bas_tarartv as t2
  10.    where t2.no_tarv=0
  11.    and t2.dte_deb>t1.dte_deb)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:55:16    

arf, sa ne fonctionne toujours pas...:(! Mais que faire!!!Pour être plus clair, voici le pb : après ma requete, voici un extrait du résultat :
 
no_art         qte_vte prix_vte      dte_ced      no_tarv
20000221 1 704,31 13/03/2002 00:00 0
20000221 1 721,92 01/01/2003 00:00 0
20000221 1 722 01/05/2004 00:00 0
 
Il faudrait que je réussisse à conserver seulement la ligne où la date est 2004 : la plus récente quoi!!!

Reply

Marsh Posté le 12-01-2006 à 14:56:18    

il te dit quoi?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 14:56:57    

pd de mémoire....

Reply

Marsh Posté le 12-01-2006 à 14:57:09    

pb de mémoire pardon!

Reply

Marsh Posté le 12-01-2006 à 14:59:07    

[:roane]
Ah oui mais là c'est pas du jeu...elle est bonne ma requête.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 15:00:05    

J'ai pas dit le contraire!!!lol
Mais moi sa veut pas marcher!!!snif

Reply

Marsh Posté le 12-01-2006 à 15:01:10    

Bah oui m'enfin une base de données sous excel, aussi...[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 15:13:50    

en fait les bases de données sont issues d'un logiciel de gestion de prod. Je peux aussi passer par l'assistant requete de excel ou par ci-query si tu prefere....

Reply

Marsh Posté le 12-01-2006 à 15:14:44    

Mais c'est quoi la vraie base, en fait?[:klem3i1]
Et tu passes par quoi actuellement?[:autobot]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 15:22:51    

Je passe par excel. En fait j'ai ci-link dans excel qui me permet de faire des requetes par excel (requete libre, requete feuille). Et donc c'est pour attaquer des bases d'une gestion de production. Mais, je peux aussi passer par ci-query si tu préfère qui permet de créer des requètes. Cela répond a ta question?

Reply

Marsh Posté le 12-01-2006 à 15:25:53    

Nan, j'y connais rien à excel.[:joce]
 
Essaie ton histoire de ci-query, on sait jamais...[:god]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-01-2006 à 15:28:55    

ok. Merci quand meme d'avoir pris le temps de m'aider!!!:)

Reply

Marsh Posté le 12-01-2006 à 16:21:17    

Si qqn a une autre idée je suis pas contre :)

Reply

Marsh Posté le 13-01-2006 à 08:33:15    

Je reviens car je n'ai toujours pas réussi!!!Je voudrais autrement savoir comment il est possible de sélectionner la dernière ligne concernant un article possédant donc plusieurs enregistrements. Ma requete est au dessus et voici un exemple de ce que j'obtient pour l'instant :  
 
no_art          qte_vte    prix_vte          dte_ced   no_tarv
20000221 1 704,31 13/03/2002 00:00       0
20000221 1 721,92 01/01/2003 00:00       0
20000221 1 722 01/05/2004 00:00       0
 
 
voila. Si quelqu'un a une pitite idée...
 

Reply

Marsh Posté le 13-01-2006 à 09:51:59    

Ou alors je peux essayer par une restriction sur la date de fin que j'ai aussi. Toutes leslignes sue je veux conserver ont leur date de fin au 31/12/2030. Seulement, je n'ai pas réussi à imposer de condition pour ne garder que ces lignes là. Ma requete est :  
 
select no_art,  
         qte_vte,  
         prix_vte,
         dte_deb,  
         no_tarv,
         dte_fin  
from bas_tarartv  
where bas_tarartv.no_tarv=0  
and bas_tarartv.dte_fin=31/12/2030 00:00  
order by no_art
 
Le pb vient de mon format de date?Voici une ligne de mon résultat sans restriction de dte :  
 
no_art qte_vte prix_vte dte_deb no_tarv dte_fin
 
 
20000222   1  722  01/05/2004 00:00 0  31/12/2030 00:00
 
Donc la je ne vois pas parce que j'utilise le meme format de dte pourtant...

Reply

Marsh Posté le 17-01-2006 à 15:20:45    

J'ai toujours un pb avec cette requete! Enfin plus tout a fait le meme. J'ai réussi a surmonter la difficulté précédente (j'avais la date de fin en champs possible et elle est par défaut à 2030) mai maintenant jeveux rajouter le prix d'achat. Le Problème, c'est un peu la meme chose, c'est que j'ai eu plusieurs commandes pour le meme article. Et donc des prix diférrents.... Voici ma requete :
 
SELECT bas_tarartv.no_art,  
           design1,  
           prix_vte,  
           dte_deb,  
           ach_brlig.prx_unit,  
           ach_brlig.no_cde,  
           ach_brent.dte_livr
FROM bas_art, bas_tarartv, ach_brlig, ach_brent
WHERE no_tarv=0
AND year(dte_fin)=2030
AND bas_art.no_art=bas_tarartv.no_art
AND bas_art.no_art=ach_brlig.no_art
AND ach_brlig.no_br=ach_brent.no_br
ORDER BY bas_tarartv.no_art
 
Comme les commandes ont un numéro croissant, je pensais qu'en utilisant max(ach_brlig.no_cde) dans mon select ce serait bon, pour garder la dernière commande en date. Mais je ne sais pas quoi mettre dans le group by pour la faire marcher cette requete........QQn pourra-t-il m'aider????

Reply

Marsh Posté le 17-01-2006 à 20:36:41    

j'ai pas tout lu, mais je vais répondre à la question originale, par contre je me fais pas chier avec le nom des champs et des tables, t'aura qu'à traduire ;)
 

Code :
  1. select l1.prix, l1.date
  2. from listeprix l1
  3. where l1.produit = 'blabla'
  4. and l1.date = (select max(l2.date) from listeprix l2 where l2.produit = l1.produit)

Reply

Marsh Posté le 17-01-2006 à 20:39:10    

Evidement, faut une seule commande pour la même date. Si le cas de deux commandes se produit, alors demande si tu dois prendre le min, le max ou quoi...
 

Code :
  1. select min(l1.prix) prix, l1.date
  2.       from listeprix l1
  3.       where l1.produit = 'blabla'
  4.       and l1.date = (select max(l2.date) from listeprix l2 where l2.produit = l1.produit)
  5.       group by l1.date


 
Ici, on prends le MIN.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed