[SQL] requête besoin d'aide
Résolu
jigolo13
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
jigolo13 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
jigolo13 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit soucis avec un requête SQL. Pour faire simple, je dispose d'une table "inventaire", cette table comprend différents titres financier de différents émetteur.
Dans un premier temps, j'ai récupérer sans soucis les titres d'un émetteur particulier gràce à la requete suivante :
"SELECT code_titre,libellé,date_inventaire, maturité , rating,rating_sp,rating_fitch,rating_moodys,rating_arrco,rating_solv2,rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "'
ORDER BY CAST(date_inventaire as datetime) DESC "
(je code en vb.net, d'ou les cb_emet (combobox ou l'utilisateur choisis l'emetteur de titres) et le date.now.date)
Donc comme je disais pour cette requête pas de probleme, sauf que l'on constate que le même titre apparait plusieurs fois, en effet il est rajouté à intervalle régulier dans la base de données donc le meme titre apparait plusieurs fois avec une date d'inventaire différente.
Ce que je cherche à faire, c'est supprimer les doublons, c'est à dire que si un titre apparait plusieurs fois, on ne le conserve qu'une fois (si possible celui à la date d'inventaire la plus récente!)
Voila la requete que j'ai essayé :
"SELECT code_titre,libellé ,date_inventaire ,rating ,rating_sp ,rating_fitch , rating_moodys, rating_arrco, rating_solv2, rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "' AND date_inventaire in (select prem.date_inventaire from table_inventaires prem, table_inventaires second where prem.emetteur = '" & cb_emet.Text & "' AND second.emetteur = '" & cb_emet.Text & "' AND prem.code_titre = second.code_titre and cast(prem.date_inventaire AS datetime) > cast(second.date_inventaire AS datetime))
ORDER BY cast(date_inventaire as datetime)")"
Cette requete ne supprime pas les doublons...
Je vois bien qu'il manque queqlue chose, mais je ne vois pas comment spécifier que je veux une date d'inventaire pour chaque code titre différent... si quelqu'un peut m'aider je lui en serait très reconnaissant!
Merci d'avance
J'ai un petit soucis avec un requête SQL. Pour faire simple, je dispose d'une table "inventaire", cette table comprend différents titres financier de différents émetteur.
Dans un premier temps, j'ai récupérer sans soucis les titres d'un émetteur particulier gràce à la requete suivante :
"SELECT code_titre,libellé,date_inventaire, maturité , rating,rating_sp,rating_fitch,rating_moodys,rating_arrco,rating_solv2,rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "'
ORDER BY CAST(date_inventaire as datetime) DESC "
(je code en vb.net, d'ou les cb_emet (combobox ou l'utilisateur choisis l'emetteur de titres) et le date.now.date)
Donc comme je disais pour cette requête pas de probleme, sauf que l'on constate que le même titre apparait plusieurs fois, en effet il est rajouté à intervalle régulier dans la base de données donc le meme titre apparait plusieurs fois avec une date d'inventaire différente.
Ce que je cherche à faire, c'est supprimer les doublons, c'est à dire que si un titre apparait plusieurs fois, on ne le conserve qu'une fois (si possible celui à la date d'inventaire la plus récente!)
Voila la requete que j'ai essayé :
"SELECT code_titre,libellé ,date_inventaire ,rating ,rating_sp ,rating_fitch , rating_moodys, rating_arrco, rating_solv2, rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "' AND date_inventaire in (select prem.date_inventaire from table_inventaires prem, table_inventaires second where prem.emetteur = '" & cb_emet.Text & "' AND second.emetteur = '" & cb_emet.Text & "' AND prem.code_titre = second.code_titre and cast(prem.date_inventaire AS datetime) > cast(second.date_inventaire AS datetime))
ORDER BY cast(date_inventaire as datetime)")"
Cette requete ne supprime pas les doublons...
Je vois bien qu'il manque queqlue chose, mais je ne vois pas comment spécifier que je veux une date d'inventaire pour chaque code titre différent... si quelqu'un peut m'aider je lui en serait très reconnaissant!
Merci d'avance
A voir également:
- [SQL] requête besoin d'aide
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
3 réponses
Salut,
J'ai lu un peu vite donc je suis pas sur que ça passe, mais si tu rajoutes un DISTINCT après ton SELECT, ça irait pas ?
"SELECT DISTINCT code_titre,libellé,date_inventaire, maturité , rating,rating_sp,rating_fitch,rating_moodys,rating_arrco,rating_solv2,rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "'
ORDER BY CAST(date_inventaire as datetime) DESC "
EDIT : En relisant ton post, ma "solution" marchera pas, vu que le distinct se fera également sur les dates, tu auras les mêmes résultats.
J'ai lu un peu vite donc je suis pas sur que ça passe, mais si tu rajoutes un DISTINCT après ton SELECT, ça irait pas ?
"SELECT DISTINCT code_titre,libellé,date_inventaire, maturité , rating,rating_sp,rating_fitch,rating_moodys,rating_arrco,rating_solv2,rating_récent
FROM table_inventaires
WHERE Emetteur = '" & cb_emet.Text & "' AND maturité >'" & Date.Now.Date & "'
ORDER BY CAST(date_inventaire as datetime) DESC "
EDIT : En relisant ton post, ma "solution" marchera pas, vu que le distinct se fera également sur les dates, tu auras les mêmes résultats.
Vraiment personne?
Le problème c'est que sans la base, c'est dur de faire une requête comme ça.
Sinon le problème semble venir de ton 2eme select, qui va apparemment te sortir qu'une seule date, (donc si tes produits n'ont pas la même date_inventaire que la date sortie dans ton 2eme select, ça ne va pas les afficher en sortie.
Mais si j'ai bien compris, tu veux récupérer les produits en doublon et les supprimer sauf l'entrée la plus récente.
Sinon pour récuperer que la liste des produits, faire le disctinct et enlever date_inventaire du select.
(sinon il y a un double quote en trop a la fin du script : ORDER BY cast(date_inventaire as datetime)")" )
Sinon le problème semble venir de ton 2eme select, qui va apparemment te sortir qu'une seule date, (donc si tes produits n'ont pas la même date_inventaire que la date sortie dans ton 2eme select, ça ne va pas les afficher en sortie.
Mais si j'ai bien compris, tu veux récupérer les produits en doublon et les supprimer sauf l'entrée la plus récente.
Sinon pour récuperer que la liste des produits, faire le disctinct et enlever date_inventaire du select.
(sinon il y a un double quote en trop a la fin du script : ORDER BY cast(date_inventaire as datetime)")" )
Oui c'est tout à fait ça, mais la liste des produits sans la date_inventaire ne supprime pas forcement les doublons car le même titre enregistré à 2 dates différentes peut avoir des ratings différents donc en utilisant le distinct comme tu dis, je peux très bien avoir le même titre qui apparait 2 fois avec des ratings différents, et en plus sans la date d'inventaire, donc très confus...
Ce qu'il faut c'est qu'effectivement chaque titre n'apparaisse qu'une seule fois et ce à sa dernière date_inventaire.
Ce qu'il faut c'est qu'effectivement chaque titre n'apparaisse qu'une seule fois et ce à sa dernière date_inventaire.
de la requete. Oui désolé j'ai pas donné tous les infos... mais c'est bon tu sais tout la je crois.
Je viens d'essayer ce que tu m'as conseillé, voila ma requete :
"SELECT prem.code_titre, prem.libellé, prem.date_inventaire, prem.rating, prem.rating_sp, prem.rating_fitch, prem.rating_moodys, prem.rating_arrco, prem.rating_solv2, prem.rating_récent
FROM table_inventaires prem, table_inventaires second
WHERE prem.emetteur = '" & cb_emet.Text & "' AND second.emetteur = '" & cb_emet.Text & "'
AND prem.maturité >'" & Date.Now.Date & "' AND second.maturité >'" & Date.Now.Date & "'
AND prem.code_titre = second.code_titre
AND CAST(prem.date_inventaire AS datetime) >= ALL CAST(second.date_inventaire AS datetime)"
Aparemment le ALL pose probleme, j'ai un message d'erreur qui me dit que la syntaxe est incorrecte vers "CAST". En supprimant le ALL, la requete fonctionne mais ne supprime que le doublons ayant la plus petite date, donc si j'ai 4 fois le meme titre (ce qui est souvent le cas!) et bien seulement celui avec la plus veille date d'inventaire est supprimée...
Je viens d'essayer ce que tu m'as conseillé, voila ma requete :
"SELECT prem.code_titre, prem.libellé, prem.date_inventaire, prem.rating, prem.rating_sp, prem.rating_fitch, prem.rating_moodys, prem.rating_arrco, prem.rating_solv2, prem.rating_récent
FROM table_inventaires prem, table_inventaires second
WHERE prem.emetteur = '" & cb_emet.Text & "' AND second.emetteur = '" & cb_emet.Text & "'
AND prem.maturité >'" & Date.Now.Date & "' AND second.maturité >'" & Date.Now.Date & "'
AND prem.code_titre = second.code_titre
AND CAST(prem.date_inventaire AS datetime) >= ALL CAST(second.date_inventaire AS datetime)"
Aparemment le ALL pose probleme, j'ai un message d'erreur qui me dit que la syntaxe est incorrecte vers "CAST". En supprimant le ALL, la requete fonctionne mais ne supprime que le doublons ayant la plus petite date, donc si j'ai 4 fois le meme titre (ce qui est souvent le cas!) et bien seulement celui avec la plus veille date d'inventaire est supprimée...