[SQL] comparaison Résultat
Résolu
Passarinho44
Messages postés
963
Date d'inscription
Statut
Contributeur
Dernière intervention
-
X-Fan Messages postés 805 Date d'inscription Statut Membre Dernière intervention -
X-Fan Messages postés 805 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- [SQL] comparaison Résultat
- Comparaison million milliard - Accueil - Technologies
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- Logiciel comparaison photo gratuit - Télécharger - Photo & Graphisme
- Logiciel sql - Télécharger - Bases de données
26 réponses
En clair j'ai des ID (ils peuvent être plusieurs fois les mêmes )...
Pour chaque ID j'ai plusieurs commentaires.
Et bien je veux afficher le dernier commentaire de chaqeu ID.
C'est plus clair?
Pour chaque ID j'ai plusieurs commentaires.
Et bien je veux afficher le dernier commentaire de chaqeu ID.
C'est plus clair?
L'idée est très bonne.
Je pense que ça devrait fonctionner mais le problème c'est que mon champ ID est en fait un champ text (il contient par exemple "cr:400019" ) et donc SQL ne veut pas utiliser le = pour la sous-requete
De quoi corser un peu la chose ;)
Je pense que ça devrait fonctionner mais le problème c'est que mon champ ID est en fait un champ text (il contient par exemple "cr:400019" ) et donc SQL ne veut pas utiliser le = pour la sous-requete
De quoi corser un peu la chose ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si tu fais un truc du genre:
SELECT TOP 1 m.idsecondaire, m.commentaire FROM matable m
HAVING m.idsecondaire = (SELECT DISTINCT(m2.idsecondaire) FROM matable m2) xx
ORDER BY commentaire DESC
Essaie un truc du genre mais j'ai rien pour testé et ça fait un petit moment que j'ai pas fait de SQL. Si j'avais le logiciel ici, je pourrais te faire ça et fonctionnel en un rien de temps XD
SELECT TOP 1 m.idsecondaire, m.commentaire FROM matable m
HAVING m.idsecondaire = (SELECT DISTINCT(m2.idsecondaire) FROM matable m2) xx
ORDER BY commentaire DESC
Essaie un truc du genre mais j'ai rien pour testé et ça fait un petit moment que j'ai pas fait de SQL. Si j'avais le logiciel ici, je pourrais te faire ça et fonctionnel en un rien de temps XD
J'ai appliquer ce que tu m'a mis à mon cas, je l'ai bidouiller dans tout les sens ^^" ... Pas moyen de le faire fonctionner ..
Le fait que ce soit un champ texte au lieu d'un champ int me renvoie toujours une erreur ... :(
Donc soit je dis à mon patron de refaire la bdd pour mettre un int (je crois pas qu'il va apprécier ^^ ) soit je trouve un moyen de comparer des champs texte pour faire la sous-requête.
Tu as une idée?
Le fait que ce soit un champ texte au lieu d'un champ int me renvoie toujours une erreur ... :(
Donc soit je dis à mon patron de refaire la bdd pour mettre un int (je crois pas qu'il va apprécier ^^ ) soit je trouve un moyen de comparer des champs texte pour faire la sous-requête.
Tu as une idée?
Mon champ call_req_id est toujours de la forme "cr:xxxxxx".
Je me demande donc si on peut pas avec SQL virer les "cr:" puis transformer le résultat en int.
Ou alors comparer le résultat au suivant (mais toujours le même problème en fait ... ^^ )
Je me demande donc si on peut pas avec SQL virer les "cr:" puis transformer le résultat en int.
Ou alors comparer le résultat au suivant (mais toujours le même problème en fait ... ^^ )
Je viens d'essayer les 2 que tu m'as proposé ... Toujours une erreur.
Par contre pour le dernier l'erreur est diférente : il me dit qu'il y a une erreur de syntaxe près de "," (je sais pas quel virgule par contre >< )
Voici comment je l'ai adapté, tu trouveras peut-être l'erreur :
SELECT TOP 1
t1.call_req_id,
t1.action_desc
FROM
Act_log AS "t1"
HAVING
CONVERT(SUBSTR(t1.call_req_id,3,LEN(t1.call_req_id)) AS int) = (SELECT
DISTINCT(CONVERT(SUBSTR(t2.call_req_id,3,LEN(t2.call_req_id)) AS int))
FROM
Act_log AS "t2") xx
ORDER BY t1.action_desc DESC
Par contre pour le dernier l'erreur est diférente : il me dit qu'il y a une erreur de syntaxe près de "," (je sais pas quel virgule par contre >< )
Voici comment je l'ai adapté, tu trouveras peut-être l'erreur :
SELECT TOP 1
t1.call_req_id,
t1.action_desc
FROM
Act_log AS "t1"
HAVING
CONVERT(SUBSTR(t1.call_req_id,3,LEN(t1.call_req_id)) AS int) = (SELECT
DISTINCT(CONVERT(SUBSTR(t2.call_req_id,3,LEN(t2.call_req_id)) AS int))
FROM
Act_log AS "t2") xx
ORDER BY t1.action_desc DESC
SELECT m.idsecondaire, m.commentaire FROM matable m
INNER JOIN (SELECT TOP 1 * FROM matable m2 ORDER BY commentaire DESC )xx
ON xx.idsecondaire = m.idsecondaire
J'ai franchement pas d'idées là tout de suite LOL. Faut que j'y pense mais bref.
INNER JOIN (SELECT TOP 1 * FROM matable m2 ORDER BY commentaire DESC )xx
ON xx.idsecondaire = m.idsecondaire
J'ai franchement pas d'idées là tout de suite LOL. Faut que j'y pense mais bref.
SELECT TOP 1 m.idsecondaire, m.commentaire FROM matable m
HAVING CONVERT((CONVERT(SUBSTR(m.idsecondaire,3,LEN(m.idsecondaire)) AS varchar(10))) AS int) = (SELECT DISTINCT(CONVERT((CONVERT(SUBSTR(m2.idsecondaire,3,LEN(m2.idsecondaire)) AS varchar(10)) AS int))) FROM matable m2) xx
ORDER BY m.commentaire DESC
Un truc comme ça je suppose.
HAVING CONVERT((CONVERT(SUBSTR(m.idsecondaire,3,LEN(m.idsecondaire)) AS varchar(10))) AS int) = (SELECT DISTINCT(CONVERT((CONVERT(SUBSTR(m2.idsecondaire,3,LEN(m2.idsecondaire)) AS varchar(10)) AS int))) FROM matable m2) xx
ORDER BY m.commentaire DESC
Un truc comme ça je suppose.
Bonjour,
Je viens de tester la fonction convert et dans mon logiciel, elle ne fonctionne pas comme en SQL normal.
Pour convertir en integer je doit faire : Convert(int, t2.ref_num)
Comme ça, la conversion fonctionne mais par contre le reste non ^^
J'ai pû faire fonctionner la sous-requête mais là où il y a un problème c'est au niveau du :
Convert(int, t2.ref_num) = (SELECT DISTINCT Convert(int, t3.ref_num) 'Ref_Num_Test' FROM call_req AS "t3")
Comme il est dans un HAVING, je dois mettre t2.ref_num dans un GROUP BY avant.
Seulement le problème est que lorsque je met le t2.ref_num dans un GROUP BY, il me dit qu'il ne peut pas trier des champs text (il ne prend pas la conversion dans le GROUP BY ... )
Je viens de tester la fonction convert et dans mon logiciel, elle ne fonctionne pas comme en SQL normal.
Pour convertir en integer je doit faire : Convert(int, t2.ref_num)
Comme ça, la conversion fonctionne mais par contre le reste non ^^
J'ai pû faire fonctionner la sous-requête mais là où il y a un problème c'est au niveau du :
Convert(int, t2.ref_num) = (SELECT DISTINCT Convert(int, t3.ref_num) 'Ref_Num_Test' FROM call_req AS "t3")
Comme il est dans un HAVING, je dois mettre t2.ref_num dans un GROUP BY avant.
Seulement le problème est que lorsque je met le t2.ref_num dans un GROUP BY, il me dit qu'il ne peut pas trier des champs text (il ne prend pas la conversion dans le GROUP BY ... )
Tu peux mettre:
GROUP BY Convert(int, t3.ref_num)
Je ne pense pas que ce soit interdit. Mais sinon, est-ce que tu as pu faire marcher substring?
GROUP BY Convert(int, t3.ref_num)
Je ne pense pas que ce soit interdit. Mais sinon, est-ce que tu as pu faire marcher substring?
Non, il ne substring ne fonctionne pas mais en fait je n'en ai pas besoin : j'utilise un autre champ qui ne comporte que des chiffres donc plus de problème de ce côté là.
Je n'ai même plus de problème pour la conversion en integer.
J'ai trouvé sur un autre forum une personne qui avait un problème un peu similaire.
En essayant d'adapter son code j'arrive à ça mais toujours quelques soucis : il me dit que la colonne ref_num est invalide.
Je ne sais pas trop utiliser l'inner join donc bon ... :s
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t2.description
FROM
call_req "t2",
Act_log "t1"
INNER JOIN
(
SELECT
Max(t1.ref_num),
t2.id
FROM
Act_log "t1",
call_req "t2"
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
GROUP BY
t1.id
) As "DernierEnrs"
ON t1.id=DernierEnrs.id
AND t1.ref_num=DernierEnrs.ref_num
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
GROUP BY t2.id
Je n'ai même plus de problème pour la conversion en integer.
J'ai trouvé sur un autre forum une personne qui avait un problème un peu similaire.
En essayant d'adapter son code j'arrive à ça mais toujours quelques soucis : il me dit que la colonne ref_num est invalide.
Je ne sais pas trop utiliser l'inner join donc bon ... :s
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t2.description
FROM
call_req "t2",
Act_log "t1"
INNER JOIN
(
SELECT
Max(t1.ref_num),
t2.id
FROM
Act_log "t1",
call_req "t2"
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
GROUP BY
t1.id
) As "DernierEnrs"
ON t1.id=DernierEnrs.id
AND t1.ref_num=DernierEnrs.ref_num
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
GROUP BY t2.id
Sinon, en adaptant ce que tu m'a proposé pour qu'il n'y ait plus d'erreur j'arrive à ça :
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description
FROM
Act_log "t1",
call_req "t2"
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
AND t2.ref_num >= '105410'
AND t2.ref_num <= '105420'
AND Convert(int,t2.ref_num) IN
(SELECT DISTINCT Convert(int, t3.ref_num)
FROM
call_req "t3"
WHERE
t3.ref_num >= '105410'
AND t3.ref_num <= '105420'
GROUP BY Convert(int, t3.ref_num))
ORDER BY Convert(int, t2.ref_num)
Mais ça ne m'affiche pas ce que je veux...
Ca m'affiche les ID avec tous les commentaires pour chaque ID.
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description
FROM
Act_log "t1",
call_req "t2"
WHERE
t1.type = 'LOG'
AND t1.call_req_id = t2.persid
AND t2.ref_num >= '105410'
AND t2.ref_num <= '105420'
AND Convert(int,t2.ref_num) IN
(SELECT DISTINCT Convert(int, t3.ref_num)
FROM
call_req "t3"
WHERE
t3.ref_num >= '105410'
AND t3.ref_num <= '105420'
GROUP BY Convert(int, t3.ref_num))
ORDER BY Convert(int, t2.ref_num)
Mais ça ne m'affiche pas ce que je veux...
Ca m'affiche les ID avec tous les commentaires pour chaque ID.
c'est quoi ton champ qui est seulement numérique là ? Et est-ce que c'est toujours la même valeur pour un même idsecondaire (donc on pourrait l'utiliser pour travailler comme si on utilisait le idsecondaire)?
Oui oui, il vient d'une autre table mais pas de problème pour l'intégrer et il correspond à l'id secondaire du début mais avec la contrainte du text en moins.
Ok donc tu as
matable 1
idsecondaire, commentaire
matable 2
idsecondaire, mêmenumerosansleslettres
C'est ça?
matable 1
idsecondaire, commentaire
matable 2
idsecondaire, mêmenumerosansleslettres
C'est ça?
Voilà, enfin presque mais ça revient au même ^^
On va les appeler :
matable1 "t1" :
t1.persid, t1.description
matable2 "t2" :
t2.persid, t2.ref_num
On va les appeler :
matable1 "t1" :
t1.persid, t1.description
matable2 "t2" :
t2.persid, t2.ref_num
ok merci mon chou, ça va déjà être plus facile comme ça XD
Alors je te montre comment marche inner join. Inner join sert à joindre deux tables ayant des champs en commun.
Donc, il va te sortir de l'information pour tous les champs ayant une valeur égale selon le champ de référence.
si j'ai la table:
matable t1 avec les deux champs id, description et qui contient les lignes suivantes:
a1, salut
a1, bonjour
a2, je suis là
a3, blabla
matable t2 avec les deux champs id, ref et qui contient les lignes suivantes:
a1, 1
a2, 2
a3, 3
Si je vais une inner join, la table virtuel qui va se créer aura l'air de:
a1, salut, 1
a1, bonjour, 1
a2, je suis là, 2
a3, blabla, 3
Si maintenant je reprend ma table t1 et que je fais un inner join avec ma table t3
matable t3 avec les deux champs id, ref et qui contient les lignes suivantes:
a1, 1
a2, 2
le résultat de la table virtuel sera:
a1, salut, 1
a1, bonjour, 1
a2, je suis là, 2
Est-ce que tu comprends ou j'explique mal XD ?
Bien entendu, il y a aussi LEFT JOIN, RIGHT JOIN ET FULL JOIN mais bon, pense pas qu'on en aura besoin.
Alors je te montre comment marche inner join. Inner join sert à joindre deux tables ayant des champs en commun.
Donc, il va te sortir de l'information pour tous les champs ayant une valeur égale selon le champ de référence.
si j'ai la table:
matable t1 avec les deux champs id, description et qui contient les lignes suivantes:
a1, salut
a1, bonjour
a2, je suis là
a3, blabla
matable t2 avec les deux champs id, ref et qui contient les lignes suivantes:
a1, 1
a2, 2
a3, 3
Si je vais une inner join, la table virtuel qui va se créer aura l'air de:
a1, salut, 1
a1, bonjour, 1
a2, je suis là, 2
a3, blabla, 3
Si maintenant je reprend ma table t1 et que je fais un inner join avec ma table t3
matable t3 avec les deux champs id, ref et qui contient les lignes suivantes:
a1, 1
a2, 2
le résultat de la table virtuel sera:
a1, salut, 1
a1, bonjour, 1
a2, je suis là, 2
Est-ce que tu comprends ou j'explique mal XD ?
Bien entendu, il y a aussi LEFT JOIN, RIGHT JOIN ET FULL JOIN mais bon, pense pas qu'on en aura besoin.