关于指定感兴趣的日期的简单SQL问题



给定表A,其中的行是为每个ID枚举的每个日期(它应该是全面的,即ID=1不会像这里所示的那样在2020年4月1日停止,而是一直持续到2022年):

ID 日期
1 2020年1月1日
1 2020年1月2日
1 2020年1月3日
1 2020年1月4日
2 2020年1月
2 2020年1月2日

连接表并使用MAX()

SELECT A.id, A.date, MAX(B.date) AS most_recent_special_date
FROM A
JOIN B ON A.id = B.id AND A.date > B.date
GROUP BY A.id, A.date

Barmar的答案运行良好且快速,如果您只想要table_b中的单个值,如果您想要table_b中的其他值,则将MAX移动到QUALIFY中可以从该行检索所有值:

因此,对于数据的一些CTE:

with table_a(ID,Date) as (
select column1, to_date(column2, 'mm/dd/yyyy') from values
(1, '1/1/2020'),
(1, '1/2/2020'),
(1, '1/3/2020'),
(1, '1/4/2020'),
(2, '1/1/2020'),
(2, '1/2/2020'),
(2, '4/2/2020')
), table_b(ID,Date) as (
select column1, to_date(column2, 'mm/dd/yyyy') from values
(1, '12/3/2019'),
(1, '1/2/2020'),
(1, '2/5/2020'),
(1, '1/10/2020'),
(2, '2/10/2020'),
(2, '4/11/2020') 
)

我们在out联接中也有区别,这取决于你想要最近的包括今天(我的方式>=)还是不包括今天(Barmar的方式>)。

select 
a.ID,
a.Date,
b.date as "Most Recent Special Date"
from table_a as a
left join table_b as b
on a.id = b.id and a.date >= b.date
qualify b.date = max(b.date) over (partition by a.id, a.date);

给出:

最近特殊日期
ID日期
12020-01-012019-12-03
120200-01-0222020-01-02
122020-01-0320200-01-02
122020-01-0420200-01-02
22020-04-022020-02-10

相关内容

  • 没有找到相关文章

最新更新