Besoin d'une ligne seulement renvoyé de INNER JOIN
Je voudrais revenir sur la première ligne seulement à partir d'une jointure interne. J'ai deux tables:
TABLE_X | TABLE_Y
id | id creationdate xid
1 | 1 01/01/2011 1
2 | 2 01/01/2011 1
3 | 3 31/12/2010 2
4 | 4 28/12/2010 3
Lignes dans la TABLE Y sont identiques, les dates de création et je suis donc d'abord obtenir le MAX(creationdate) et puis alors MAX(id) à partir de cet ensemble, par exemple:
SELECT a.id,
c.id,
d.id,
e.id,
d.CREATIONDATE,
a.REFNUMBER,
a.DATECREATED,
a.DESCRIPTION,
e.CATEGORYCODE,
e.OUTSTANDINGAM_MONAMT,
e.PREVPAIDAMOUN_MONAMT,
e.TOTALINCURRED_MONAMT,
e.LOSSFROMDATE,
FROM
TABLE_A a
INNER JOIN TABLE_B b ON (b.id = a.id)
INNER JOIN TABLE_C c ON (c.id = b.id)
INNER JOIN TABLE_D d ON
(
c.i =
(
select
d.id
FROM TABLE_D
WHERE TABLE_D.id = c.id
AND TABLE_D.id =
(
select
max(id)
from TABLE_D t1
where c_id = c.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_D t2
where t2.c_id = t1.c_id
)
)
)
)
INNER JOIN TABLE_E e ON
(
d.i =
(
select
e.d_id
from TABLE_E
where d_id = d.id
AND id =
(
select
max(id)
from e t1
where e.d_id = d.id
and CREATIONDATE =
(
select
max(CREATIONDATE)
from TABLE_E t2
where t2.d_id = t1.d_id
)
)
)
)
Cela fonctionne lorsque je l'appelle sur son propre, mais quand je l'ajoute à une JOINTURE INTERNE, je suis une ligne pour chaque ligne correspondante dans la table Y.
Ce que je veux, c'est le dernier enregistrement par creationdate et id où xid = id de TABLE_X.
Pouvez-vous nous montrer votre tentative à la jointure interne?
Ce que Marcelo a dit. Le problème réside probablement dans le REJOINDRE, lui-même. Êtes-vous rejoindre sur l'id ou MAX(id), par exemple?
Le MAX(id) - est l'id de la colonne de X ou Y?
N'a pas de sens: vous voulez que le max id valeur... en fonction du max date par l'id d'installation. Le max id n'est pas pertinent.
Je pense que vous avez besoin de clarifier votre SQL en utilisant clairement nommées par l'alias de table.
Ce que Marcelo a dit. Le problème réside probablement dans le REJOINDRE, lui-même. Êtes-vous rejoindre sur l'id ou MAX(id), par exemple?
Le MAX(id) - est l'id de la colonne de X ou Y?
N'a pas de sens: vous voulez que le max id valeur... en fonction du max date par l'id d'installation. Le max id n'est pas pertinent.
Je pense que vous avez besoin de clarifier votre SQL en utilisant clairement nommées par l'alias de table.
OriginalL'auteur adamdunne | 2011-01-17
Vous devez vous connecter pour publier un commentaire.
Essayer cette requête
La sous requête sera ramasser le haut 1 résultat qui ont max creationdate et la requête principale sera de choisir tous les dossiers que vous avez votre résultat souhaité
TOP
et des caractères génériques ont la table spécifiée si il y a des colonnes supplémentaires.OriginalL'auteur Fraz Sundal
Cela devrait le faire
Le complexe sous-requête fonctionne le max date pour chaque Y. xid groupe, et à partir de cela, d'autres oeuvres de la Max Y_ID (laissez représentent la clé sur la table Y)
OriginalL'auteur RichardTheKiwi
"quand je l'ajouter à une jointure interne"? ce jointure interne? avec ce jointure interne? La question est mal underspecified, mais je pense que vous avez besoin de cela (je n'utilise que des points de vue pour être clair, vous pouvez facilement simplement les mettre dans des accolades et de construire une grande requête):
Je n'ai pas de base de données à portée de main pour vérifier pour les petites erreurs, mais il doit s'exécuter correctement.
(mise en garde: l'hypothèse de grand est que vous n'aurez jamais un enregistrement avec une nouvelle id, et plus date)
OriginalL'auteur fdreger