AIDE requete SQL

AIDE requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 21-05-2008 à 17:03:36    

Bonjour,
 
voivi une exemple de table  
 
http://www.monsterup.com/upload/1211381847.jpg
 
j'ai un script en vb qui va lire tous les jours des infos sur des pc et les insert dans la table si les nouveaux enregistrements sont différents des anciens enregistrements.
 
ici par exemple, PC 1 et PC 3 ont 2 enregistrements car il y a eu une MAJ de version, mais je conserve dans la table l'historique, cad, les 2 enregistrements.
 
MA QUESTION =>
  il me faut une requête SQL qui me permettent de sortir toutes les dernieres informations, par exemple ici toutes les lignes sauf la 1 et la 3.
 
Merci d'avance :)
 

Reply

Marsh Posté le 21-05-2008 à 17:03:36   

Reply

Marsh Posté le 21-05-2008 à 17:37:11    

Tu es sur quel SGBD ? Peut etre qqch comme ca :
SELECT id_M, nom_M, version_M, MAX(REPLACE(version_M, "," , "" ) FROM matable GROUP BY nom_M


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 21-05-2008 à 18:25:57    

prex :o
L'id n'est pas une information utile, si tu cherches l'aggregat d'un champs il ne faut pas mettre celui-ci dans ton selection et il manque des champs dans ton group.

Code :
  1. SELECT nom_M, MAX(version_M) FROM matable GROUP BY nom_M


Message édité par anapajari le 21-05-2008 à 18:27:14

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 22-05-2008 à 08:16:42    

je suis sous MySQL,
le problème c'est qu'il est possible qu'une machine revienne à une ancienne version.
 
Il me faudrait une requête qui renvoie un seul enregistrement par nom classé par date

Reply

Marsh Posté le 22-05-2008 à 11:23:41    

Si la date suffit :

Code :
  1. SELECT id_M, `nom_M`, MAX(`date_M`), version_M FROM `test1` GROUP BY nom_M


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 22-05-2008 à 11:51:40    

marchera pas :o
la requête ci dessous va remonter la "plus vielle" date pour un couple nom/version donnée, mais certainement pas "la dernière version" connu pour un nom.
Par ailleurs, il faut mettre toutes les colonnes non-agrégées dans le group by


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 22-05-2008 à 12:10:56    

j'ai trouvé une manip qui marche, je commence par récup tout les id qui marche
 

Code :
  1. SELECT MAX(id_M) from matable GROUP BY nom_M


puis je boucle en faisant :

Code :
  1. SELECT * FROM maTable WHERE id_M='id_constante'


c'est un peu freestyle mais ça à l'air de marcher, merci de m'avoir orienté vers group by et max :)

Reply

Marsh Posté le 22-05-2008 à 12:16:51    

anapajari a écrit :

la requête ci dessous va remonter la "plus vielle" date pour un couple nom/version donnée, mais certainement pas "la dernière version" connu pour un nom


Je n'ai jamais prétendu le contraire, tout dépend de ce que manik971 veut vraiment (pour moi ce n'est pas clair) :

  • La ligne avec la date la plus récente ?
  • La ligne avec la version la plus récente ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 22-05-2008 à 12:28:26    

si j'ai tout compris, il veut savoir "pour un id donné, quel est la version installée en dernier ( donc avec la date max )".
Il faut faire un sous-requete du style:

Code :
  1. SELECT
  2. a.id,
  3. a.nom,
  4. a.version
  5. FROM
  6. tatable
  7. WHERE
  8. EXISTS (
  9.  SELECT
  10.    b.id,
  11.    max(b.date)
  12.  FROM
  13.    taTable b
  14.  WHERE
  15.    b.id = a.id
  16.   HAVING
  17.    ax(b.date) = a.date  
  18.   GROUP BY id
  19. )


Message édité par anapajari le 22-05-2008 à 12:28:50

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 22-05-2008 à 14:17:50    

oui je veux la ligne avec la date la plus récente

Reply

Marsh Posté le 22-05-2008 à 14:17:50   

Reply

Marsh Posté le 23-05-2008 à 00:23:23    

select id,nom,date,version from tatable a
where id = (select max(id) from tatable where a.nom = nom)


---------------
GREGPHOTOS.BE - Galerie HFR
Reply

Sujets relatifs:

Leave a Replay

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