begin process at 2010 02 10 06:55:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Probleme de regroupement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme de regroupement

vendredi 1 février 2008 à 13:10:25 | Probleme de regroupement

gatita_dev

Bonjour, j'ai un souci avec une requête de selection qui contient la fonction d'agrégation Max
J'ai une table devis(id_devis, id_client, date_devis , montant)
Je veux selectionner le devis le plus récent de chaque client
Voilà ma requête

select id_devis, id_client, max(date_devis) , montant
from devis
group by id_client

mais ça marche pas, il me retourne une erreur, que toutes les colonne doivent être contenu dans la fonction d'agrégat, mais si je les met toutes, alors il m'affiche tous les devis.

j'espére que je me suis bien expliquée, et merci de m'apporter votre aide
samedi 2 février 2008 à 22:48:39 | Re : Probleme de regroupement

yann_lo_san

Réponse acceptée !

Salut,

-- Exemple :
-- on a le client '100' avec les devis 1 et 2 (le 2 est le plus récent)
-- et le client '200' avec les devis 3, 4 et 5 (le 4 est le plus récent)

declare @devis table
(
     id_devis int, id_client int, date_devis datetime, montant money
)
insert into @devis values(1,100,'30/12/2007', 100.00)
insert into @devis values(2,100,'28/01/2008', 150.10)            --> le + récent 
insert into @devis values(3,200,'01/01/2008', 110.00)
insert into @devis values(4,200,'29/01/2008', 105.10)            --> le + récent
insert into @devis values(5,200,'01/01/2006', 10.00)

-- on fait une jointure sur le regroupement intéressant (ID_CLIENT, DATE_DEVIS)
-- et TOUS les champs (pour pouvoir tout afficher et pas que l'id client et la date)

select affiche.id_devis,
          affiche.id_client,
          convert(varchar,affiche.date_devis,103) as 'date_devis',
          affiche.montant
from @devis affiche
join (select regroup.id_client, max(regroup.date_devis) as 'date_devis' 
        from @devis regroup
        group by regroup.id_client) ref
on affiche.id_client = ref.id_client and affiche.date_devis = ref.date_devis
order by affiche.id_client

-- Résultat !

2 100 28/01/2008 150.1000
4 200 29/01/2008 105.1000

lundi 4 février 2008 à 10:02:28 | Re : Probleme de regroupement

gatita_dev

j'ai pas bien compris ta requête, normalement j'ai une seule table c'est quoi regroup et affiche, ça me retourne une erreu de syntaxe
lundi 4 février 2008 à 20:00:00 | Re : Probleme de regroupement

yann_lo_san

Réponse acceptée !

Salut,

Ceci est du TRANSACT-SQL (sql-server 2000/2005)
Aucune erreur de syntaxe.

- affiche est l'ALIAS de la table temp @devis sans regroupement.
- regroup est l'ALIAS de la meme table avec regroupement.

Cela s'appelle une table INLINE.
cad on se sert des champs d'un select comme d'une table.

Info,
tu ne PEUX PAS faire un select avec GROUP BY sans avoir la liste de selection dans le group by en question.

Donc on crée une sous-table avec le bon regroupement :

select r.id_client, max(r.date_devis)  
from @devis r 
group by r.id_client

Puis on selectionne avec la table exterieure tout les champs que l'on veut afficher.

Bonne chance...

mardi 5 février 2008 à 09:22:26 | Re : Probleme de regroupement

gatita_dev

Merci, ça a marché.


Cette discussion est classée dans : probleme, requête, id, devis, regroupement


Répondre à ce message

Sujets en rapport avec ce message

3 tables 1 requête [ par kclito ] bonjours, (j'avoue que je ne savais pas si je devais mettre ça dans le forum php ou sql ....) Je vous explique mon problème J'ai 3 tables CATEGORIE Requête sur deux indices pointant sur une même table [ par dompro ] Bonjour,Voici ce que je  recherche:    Rencontre avec comme champs Id_Eng1 et Id_Eng2      Engagement avec Id_Eng, Lb_Eng, Id_Org    Organisation avec requête sur le résultat d'une requête [ par sev622 ] Bonjour, J'ai un problème dans la construction de ma requête. J'ai une table avec 2 champs numériques : id_p, id_f Je veux compter le nombre d'id_p qu Problème avec une requête sql..... [ par emmanuel9 ] Bonjour à tous, En faite j'ai une table Personne : ID | GROUPE_ID | ORDRE et dessus je fais une requête : SELECT ID FROM PERSONNE WHERE....... et Problème avec uen requête... [ par emmanuel9 ] Bonjour à tous, J'ai pose une question y'a pas longtemps sur le forum, on m'a repondu et effectivement ca marche, le problème c'est que je viens de m' Probleme de requête avec INSERT [ par emmanuel9 ] Bonjour à tous, J'aurais voulu savoir si il est possible de créer une requête de ce type : INSERT INTO TABLE(NB) VALUE (SELECT MAX(MONTANT) FROM DEPEN problème de requête [ par emmanuel9 ] Bonjour à tous, J'ai un problème de requête : J'ai la table CHAINE : validateur_id | ordre | groupe_id |  autorise1                   &n Question requête Mysql [ par AgentSmith ] Bonjour à tout les programmeurs SQL... Je vous solicite pour une quéstion simple voir une question de debutant. Ma question ce porte sur une recherche requette de regroupement - problème [ par bename ] Bonjour,j'ai  créé une requette qui regroupe deux champs et qui trie le troisième, mais  le groupement se déforme apres le trie, le resultat me tri le requête SELECT: résultats tronqués... [ par wolflinger ] Bonjour,J'ai un soucis d'affiche avec des formulaires html/php.Mais je pense que le problème provient de la requete SQL.Je m'explique :Via un formulai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales