2016-11-28 3 views
0

J'ai un tableau A avec un champ Date d'entrée en vigueur et je dois identifier lorsqu'un champ d'une autre table B se situe entre la date d'entrée en vigueur et la suivante (par exemple pour assigner une valeur de champ différente dans le tableau B). Par exemple.SQL Server Recherche d'enregistrements dans la plage de dates à l'aide de la colonne Date unique

A 

[Effective Date] [Cost] 
---------------- ----------------  
1/1/2016   10.25 
5/20/2016   11.75 
B 

[Service Date]  [Cost] 
---------------- ---------------- 
3/1/2016   *should be 10.25* 

La chose est, il ne peut y avoir une "fin" date d'effet. Donc, je dois aussi prendre en compte cette possibilité. Toutes les idées sont très appréciées.

Répondre

0
select 
    b.[Service Date] 
    , Cost = (select top 1 a.Cost 
       from a 
       where a.[Effective Date] <= b.[Service Date] 
       /* assuming there are other important correlating identifiers, 
        you would add something like: */ 
       -- and a.[ServiceId] = b.[ServiceId] 
       order by a.[Effective Date] desc 
      ) 
from b; 
+1

Est-ce que cela ne retournera pas 11.75? Ce qui n'est pas ce que l'OP voulait. Je pense que vous voulez dire moins ou égal à dans le choix interne. –

+0

A renversé ma flèche. Merci! – SqlZim

+0

Merci! C'est exactement ça. – RiSt