Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2011, 10h03   #1
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
Par défaut Select imbriqué / create view

Bonjour à tous, j'ai une requête qui marche, je voudrais en faire une vue mais il refuse car il y a un select imbriqué.

voici la bestiole:
Code :
1
2
3
4
5
6
7
8
CREATE VIEW client_commande  AS
SELECT achat_ponct.entity_id, 
achat_ponct.montant_commande, 
achat_ponct.date_derniere_commande,
ROUND(SUM(montant_commande),2) AS total_achat
FROM (SELECT customer_id AS entity_id, ROUND(grand_total,2) AS montant_commande, DATE_FORMAT(created_at,'%d/%m/%Y') AS date_derniere_commande FROM sales_order ORDER BY created_at DESC) AS achat_ponct
GROUP BY achat_ponct.entity_id
ORDER BY achat_ponct.entity_id
c'est une requete lancée sur une base magento.
il faut qu'elle me sorte par entity id, la date de la dernière commande, le montant total des commandes, et le montant de la dernière commande.

Si vous avez une idée pour optimiser la requete je prends !
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 11h13   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Quel est l'interet de votre sous requete ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 11h23   #3
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
Si je le fais pas dans sous requete je n'arrive pas à avoir le bon montant de dernière commande.
il me sort un autre montant celui dont l'id est le plus petit je présume
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h21   #4
Futur Membre du Club
 
Inscription : avril 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 48
Points : 17
Points : 17
personnelement je mettrai directement

Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE VIEW client_commande  AS
SELECT customer_id , 
ROUND(grand_total,2), 
DATE_FORMAT(created_at,'%d/%m/%Y'),
ROUND(SUM(montant_commande),2) AS total_achat
FROM sales_order 
 
GROUP BY customer_id
ORDER BY customer_id
ORDER BY created_at DESC
mais apparement comme tu as un probleme avec ca,

tu peux essayer
Code :
CREATE VIEW toto AS SELECT customer_id AS entity_id, ROUND(grand_total,2) AS montant_commande, DATE_FORMAT(created_at,'%d/%m/%Y') AS date_derniere_commande FROM sales_order ORDER BY created_at DESC
et faire apres
Code :
1
2
3
4
5
6
7
8
CREATE VIEW client_commande  AS
SELECT entity_id, 
montant_commande, 
date_derniere_commande,
ROUND(SUM(montant_commande),2) AS total_achat
FROM toto
GROUP BY entity_id
ORDER BY entity_id
et normalement ca devrait passer
malheureusement je ne peux pas tester n'ayant pas de base magento sous la main
omedo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h30   #5
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
dans les deux cas (1ere requete corrigée en:
Code :
1
2
3
4
5
6
7
8
SELECT customer_id , 
ROUND(grand_total,2), 
DATE_FORMAT(created_at,'%d/%m/%Y') AS dt_com,
ROUND(SUM(grand_total),2) AS total_achat
FROM sales_order 
 
GROUP BY customer_id
ORDER BY dt_com,customer_id DESC
le double order by il aimait pas.

J'obtiens les bonnes infos SAUF pour le montant de la commande qui est le premier id_commande du client , et non pas le dernier.
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h34   #6
Futur Membre du Club
 
Inscription : avril 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 48
Points : 17
Points : 17
et si tu inverse le order by concernant la date de commande ??
a tout hasard
omedo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h37   #7
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
idem,
j'ia testé de faire un max(created_at) mais il me sort la bonne date mais pas la bonne ligne de commande non plus...
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 10h48   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Citation:
il faut qu'elle me sorte par entity id, la date de la dernière commande, le montant total des commandes, et le montant de la dernière commande.
1) Quelle est la date de la dernière commande et le montant total des commandes par entity_id ?
Code :
1
2
3
4
5
SELECT entity_id, 
  MAX(created_at) AS date_derniere_commande,
  ROUND(SUM(montant_commande), 2) AS total_achat
FROM sales_order
GROUP BY entity_id
2) On récupère le montant de ces dernières commandes
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT s.entity_id, 
    tmp.date_derniere_commande, 
    tmp.total_achat,
    s.montant_commande AS montant_derniere_commande
FROM sales_order s
INNER JOIN
(
    SELECT entity_id, 
        MAX(created_at) AS date_derniere_commande,
        ROUND(SUM(montant_commande), 2) AS total_achat
    FROM sales_order
    GROUP BY entity_id
) tmp ON tmp.entity_id = s.entity_id
    AND tmp.date_derniere_commande = s.created_at
ORDER BY s.entity_id
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h29.


 
 
 
 
Partenaires

Hébergement Web