SQL : select d'un seul enregistrement

Résolu/Fermé
Vasu Messages postés 25 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 12 décembre 2008 - 24 oct. 2008 à 15:10
Vasu Messages postés 25 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 12 décembre 2008 - 30 oct. 2008 à 09:05
Bonjour,

J'ai un problème pour une requête SQL. Ma requête me retourne Nom, utilisateur et date du dernier inventaire :

Nom Utilisateur Dernier inventaire
AB XY 2005-09-30
AB XY 2005-10-31
CD VG 2005-08-03
CD VG 2006-03-15

Mais j'aimerais que le nom n'apparaisse qu'une fois avec la date la plus récente dans ma requête et non pas à chaque date enregistrée. Si ça peut aider, la date du dernier inventaire se trouve dans une table différente des 2 premiers champs.

Merci de votre aide.

4 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
30 oct. 2008 à 08:57
Salut,
essaye:
SELECT /* CM, 27-jan-2005 */
, device.name
, device.user
,max( device_connection.dt_end)
FROM device, device_connection
WHERE
device.id = device_connection.device_id
group by device.name, device.user
ORDER BY device.name
0
Vasu Messages postés 25 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 12 décembre 2008 1
30 oct. 2008 à 09:05
J'ai édité mon message du dessus. Ca fonctionne maintenant, mais je sais pas si c'est optimisé.

Meric beaucoup.
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 oct. 2008 à 15:15
salut,
select u.nom,p.prenom,i.inv_name from utilisateur u,inventaire i where u.inv_id=i.inv_id and i.inv_date=(select max(inv_date) from inventaire)
Ca te donne quoi?
Ou sinon comment est faite ta requete?
@+
-1
Vasu Messages postés 25 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 12 décembre 2008 1
24 oct. 2008 à 16:05
Voici ma requête (si jamais c'est une requête sql sous oracle). Mais ça m'affiche seulement l'enregistrement la date la plus grande et me met la même pour tout les enregistrements.

CREATE OR REPLACE VIEW DEVICE_V
(NAME,  USER, DEVICE_INVENTORY)
AS 

SELECT /* CM, 27-jan-2005 */
       , device.name
       , device.user
       , device_connection.dt_end        device_inventory
    
FROM device
       , device_connection

WHERE
	 device.id  = device_connection.device_id
	 AND device_connection.dt_end = (select max(dt_end) from device_connection)

ORDER BY device.name
-1
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
24 oct. 2008 à 20:55
Salut,
j'ai testé ca:
SELECT /* CM, 27-jan-2005 */
, device.name
, device.user
,max( device_connection.dt_end) device_inventory

FROM device
, device_connection

WHERE
device.id = device_connection.device_id
Sur une de mes bases oracle ca semble me donner le résultat voulu...
dis moi si c'est le résultat qu'il fallait!!
@+
-1
Vasu Messages postés 25 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 12 décembre 2008 1
30 oct. 2008 à 08:06
Hello,

désolé du retard, mais mon projet n'a lieu que le jeudi et vendredi, donc j'ai pas pu regarder depuis. Mais quand je fais ta sélection, j'ai une erreur oracle qui me dit : la fonction de groupe ne porte pas sur un groupe simple.

Donc j'ai modifié le code et maintenant ça fonctionne, mais par contre je sais pas si c'est de la meilleure façon que je m'y prend :

SELECT DISTINCT/* CM, 27-jan-2005 */
, device.name
, device.user
,(select max( dt_end) from device_connection where device_id = device.id) device_inventory

FROM device
, device_connection

WHERE
device.id = device_connection.device_id

Avec mon select imbriqué, il me sortait la dernière date de connexion, mais x fois, alors j'ai ajouté le DISTINCT pour n'avoir qu'un seul enregistrement par device.
Merci encore de ton aide. Tu m'as bien aiguillé ;-).
0