如何解决从依赖表中选择最后到某个日期的记录
在 SQL Server 中我有 2 个表
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_b表的最新按日期记录,但不能大于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 Server 中,我们可以使用行限制横向连接将第二个表中的最新记录带到第一个表的时间戳之前:
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
这也消除了不匹配的行,这与您的数据一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。