Select 从受抚养人到某个日期的最后记录 table

Select the last to a certain date record from the dependent table

在SQL服务器我有2个tables

table_a

card_number reissue_date
1           15.02.2017 00:00:00
2           01.02.2017 00:00:00
3           01.01.2017 00:00:00

table_b

card_number timestamp               limit
1           01.01.2017 00:00:00     9999
1           01.02.2017 00:00:00     100000
1           01.03.2017 00:00:00     25000
2           01.01.2017 00:00:00     10001
3           01.03.2017 00:00:00     5000
3           01.04.2017 00:00:00     0

预期结果

card_number limit
1           100000
2           10001

我在这方面尝试了很多选择,我接近解决方案,但我无法显示“限制”列,解决这个问题的最佳方法是什么?

我的错误决定

SELECT table_b.card_number, Max(timestamp)
FROM   table_b LEFT JOIN table_a
  ON ( table_b.card_number = table_a.card_number
   AND table_b.timestamp < table_a.reissue_date )
WHERE  table_a.reissue_date IS NOT NULL
GROUP  BY table_b.card_number;

需要选择table_btable的最新日期记录,但不能大于table_a

的日期

我目前找到的工作解决方案,我不确定它是否正常工作,但根据我的初始数据,它给出了预期的结果

SELECT card_number, 
       Max(timestamp), 
       Max(limit) AS timestamp 
FROM   table_b 
WHERE  table_b.timestamp < (SELECT reissue_date 
                            FROM   table_a 
                            WHERE  card_number = table_b.card_number) 
GROUP  BY card_number;

在 SQL 服务器中,我们可以使用行限制横向连接将第二个 table 中的最新记录带到第一个 table 的时间戳之前:

select a.card_number, b.*
from table_a a
cross apply (
    select top (1) b.*
    from table_b b 
    where b.card_number = a.card_number and b.timestamp < a.reissue_date 
    order by b.timestamp desc
) b

这也消除了不匹配的行,这与您的数据一致。