[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 -
Bonjour,
Je travaille en SQL et je précise que je ne peux pas utiliser autre chose.
En fait mon problème est que je retourne un résultat du type :
ID secondaire | Commentaire
1 | Commentaire1
1 | Commentaire2
1 | Commentaire3
2 | Commentaire1
... | ...
Et je voudrais faire une requête qui me permettrait de comparer le résultat de l'ID secondaire avec le suivant (ici d'abord 1 avec 1, puis 1 avec 1, puis 1 avec 2 ... etc... )
Et n'afficher un résultat que lorsque les deux sont différents
(Donc en clair ça doit m'afficher le dernier commentaire de chaque ID secondaire.
Je sais pas si c'est très clair... ^^"
Demandez moi si vous voulez plus de précisions.
Merci d'avance pour vos réponses =)
Je travaille en SQL et je précise que je ne peux pas utiliser autre chose.
En fait mon problème est que je retourne un résultat du type :
ID secondaire | Commentaire
1 | Commentaire1
1 | Commentaire2
1 | Commentaire3
2 | Commentaire1
... | ...
Et je voudrais faire une requête qui me permettrait de comparer le résultat de l'ID secondaire avec le suivant (ici d'abord 1 avec 1, puis 1 avec 1, puis 1 avec 2 ... etc... )
Et n'afficher un résultat que lorsque les deux sont différents
(Donc en clair ça doit m'afficher le dernier commentaire de chaque ID secondaire.
Je sais pas si c'est très clair... ^^"
Demandez moi si vous voulez plus de précisions.
Merci d'avance pour vos réponses =)
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
Bon, il m'a fallu de la concentration mais j'ai compris et tu expliques bien tkt =)
Et moi je veux afficher :
1, bonjour
2, je suis là
J'ai compris comment fonctionne le inner join mais je ne vois pas comment il peut m'afficher le résultat que je veux xD
Et moi je veux afficher :
1, bonjour
2, je suis là
J'ai compris comment fonctionne le inner join mais je ne vois pas comment il peut m'afficher le résultat que je veux xD
Ouai ben voilà alors..
on a:
matable1 "t1" :
t1.persid, t1.description
matable2 "t2" :
t2.persid, t2.ref_num
Donc:
SELECT TOP 1 t1.persid, t1.desciption FROM matable1 t1
INNER JOIN matable2 t2
ON t1.persid = t2.persid
HAVING t2.ref_num = (SELECT DISTINCT(t3.ref_num) FROM matable2 t3) xx
ORDER BY t1.persid DESC
Essaie de quoi du genre d'abord.
on a:
matable1 "t1" :
t1.persid, t1.description
matable2 "t2" :
t2.persid, t2.ref_num
Donc:
SELECT TOP 1 t1.persid, t1.desciption FROM matable1 t1
INNER JOIN matable2 t2
ON t1.persid = t2.persid
HAVING t2.ref_num = (SELECT DISTINCT(t3.ref_num) FROM matable2 t3) xx
ORDER BY t1.persid DESC
Essaie de quoi du genre d'abord.
Bonjour,
Et bien j'ai encore un problème ! :D
Il me dit que, pour être dans le HAVING, le t2.ref_num doit être dans un GROUP BY.
Le problème c'est que si je met t2.ref_num dans un GROUP BY, il me dit qu'il faut que j'y mette aussi t1.persid et t1.description.
Mais en fait, il ne veut pas de champ text dans le GROUP BY! xD
Donc en fait je tourne en rond un peu ... ^^
Je ne peux pas le mettre dans un WHERE plutôt que dans un HAVING?
Sinon j'ai un champ date dans ma table t1 (c'est un timestamp je crois, il a une valeur en moyenne de 1 206 xxx xxx ).
Ca peut aider?
Ah oui et je me demandais : à quoi ça sert tes "xx" à la fin de ton HAVING?
EDIT :
Je viens d'enlever le GROUP BY que j'avais rajouté et de remplacer le HAVING par un WHERE.
Il ne m'affiche qu'un seul commentaire, et même pas le dernier :(
Le problème avec ton TOP 1 c'est qu'il ne m'affichera toujours qu'un résultat... :s
Et bien j'ai encore un problème ! :D
Il me dit que, pour être dans le HAVING, le t2.ref_num doit être dans un GROUP BY.
Le problème c'est que si je met t2.ref_num dans un GROUP BY, il me dit qu'il faut que j'y mette aussi t1.persid et t1.description.
Mais en fait, il ne veut pas de champ text dans le GROUP BY! xD
Donc en fait je tourne en rond un peu ... ^^
Je ne peux pas le mettre dans un WHERE plutôt que dans un HAVING?
Sinon j'ai un champ date dans ma table t1 (c'est un timestamp je crois, il a une valeur en moyenne de 1 206 xxx xxx ).
Ca peut aider?
Ah oui et je me demandais : à quoi ça sert tes "xx" à la fin de ton HAVING?
EDIT :
Je viens d'enlever le GROUP BY que j'avais rajouté et de remplacer le HAVING par un WHERE.
Il ne m'affiche qu'un seul commentaire, et même pas le dernier :(
Le problème avec ton TOP 1 c'est qu'il ne m'affichera toujours qu'un résultat... :s
Bon, j'ai finalement réussi ! ! ! :D
En utilisant le champ date.
Voici ma requête finale :
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description,
t1.system_time
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 t1.system_time IN (
SELECT
MAX(t1.system_time) AS "sys_time_max"
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'
GROUP BY
t2.ref_num
)
ORDER BY
t2.ref_num
Merci encore pour ton aide ! =)
A bientôt
En utilisant le champ date.
Voici ma requête finale :
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description,
t1.system_time
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 t1.system_time IN (
SELECT
MAX(t1.system_time) AS "sys_time_max"
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'
GROUP BY
t2.ref_num
)
ORDER BY
t2.ref_num
Merci encore pour ton aide ! =)
A bientôt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai enfin réussi ! ! ! :D
J'ai utilisé le champ date (qui ici s'appelle system_time)
Je post la requête si ça peut aider quelqu'un plus tard ! =)
Encore merci à toi X-Fan et @bientôt! =)
Voici la requête finale :
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description,
t1.system_time
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 t1.system_time IN (
SELECT
MAX(t1.system_time) AS "sys_time_max"
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'
GROUP BY
t2.ref_num
)
ORDER BY
t2.ref_num
J'ai utilisé le champ date (qui ici s'appelle system_time)
Je post la requête si ça peut aider quelqu'un plus tard ! =)
Encore merci à toi X-Fan et @bientôt! =)
Voici la requête finale :
SELECT
Convert(int, t2.ref_num) "Ref_Num",
t1.description,
t1.system_time
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 t1.system_time IN (
SELECT
MAX(t1.system_time) AS "sys_time_max"
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'
GROUP BY
t2.ref_num
)
ORDER BY
t2.ref_num
Oups, j'avais cru que ça avait pas afficher, désolé :s
Il bug le forum. Le problème de WHERE c'est qu'il ne compare qu'une valeur et donc ne retourne souvent qu'une poignée de champ sans forcement en garder un de chaque.
C'est clair que sans avoir les tables complètes, c'est dur de construire une requête car tu ne connais pas toutes les possibilités. Je ne savais même pas qu'il y avait un champ de date. :P
Bravo pour ta belle requête et bon courage ^^
C'est clair que sans avoir les tables complètes, c'est dur de construire une requête car tu ne connais pas toutes les possibilités. Je ne savais même pas qu'il y avait un champ de date. :P
Bravo pour ta belle requête et bon courage ^^