2010-02-25 10 views
4

Je fais une requête pour saisir le dernier enregistrement B pour chaque enregistrement A qui est antérieur à la date d'enregistrement A. (J'espère que cela a du sens)Comment faire une jointure sur le dernier enregistrement? SQL

Et je n'ai aucune idée de comment le faire! S'il vous plaît aider!

Mon point de vue final sera

AID, AData, ADate, BData 

schéma de table grossière

table A 
(
AID, 
ADate, 
AData 
) 

table B 
(
BID, 
AID, 
BDate, 
BData 
) 

choses à noter sont:

  1. Le tableau A est dans SQL DB
  2. Tableau B est de serveur de liaison à Oracle
  3. Tableau B est super gigantesque

Merci!

+0

Super merci! –

Répondre

2

Cette requête ferait l'affaire:

select  a.*, curr.* 
from  a 
inner join b   curr 
on   a.aid = curr.aid 
and  a.adate > curr.bdate 
where  curr.bdate = (
       select max(b.bdate) 
       from b 
       where b.aid = curr.aid 
       and b.bdate <= curr.bdate 
      ) 

Il y a quelques buts. Je n'ai pas beaucoup d'expérience avec ces 'tables liées' mais je peux imaginer que ça va terriblement mal. Vous devriez essayer de comprendre comment MS SQL résout ce genre de requête. Ce que vous voulez être sûr, c'est qu'il peut pousser la sous-requête du côté de l'oracle - vous ne voulez certainement pas que MS SQL saisisse toutes les données sur le fil et l'exécute du côté de MS SQL. Si la performance est un problème, vous devriez probablement essayer de le faire dans l'autre sens - obtenir une copie de la table A du côté de l'oracle, résoudre la requête là-bas tout un truc qui dans une vue, et si vous besoin de cela du côté MSSQL, lien vers cette vue.

+0

On dirait la réponse! –

Questions connexes