left join Mars_Crater_Names n1 on t1.ID=n1.ID and t1.StartDate between n1.StartDate and n1.EndDate
问题是T1
中记录的开始日期可能不在StartDate
和N1
中与之匹配的记录的StartDate
和EndDate
之间,因此键入的查询不是我想要的。
N1
| 识别号|火山口名称|开始日期|结束日期|
| - ------|- ------|- ------|- ------|
| ID4|Phoenix|04090000|小行星1822|
| ID4|奥罗拉|小行星1823|小行星1978|
植入物1
| 识别号|恒星_相位|开始日期|结束日期|
| - ------|- ------|- ------|- ------|
| ID4|干燥|小行星1812|小行星1833|
| ID4|正火|小行星1833|小行星1978|
因此,结论是,Phoenix
应该与Drying
连接,因为它们的值域相交,尽管Aurora
确实与Drying
相交,但Phoenix
是第一个相交的。Aurora
与Normalizing
连接是因为它是第一个也是唯一一个与Normalizing
相交的。
left join Mars_Crater_Names n1 on t1.ID=n1.ID and t1.StartDate between n1.StartDate and n1.EndDate
这是我试过的,但离我需要的还差得很远。
1条答案
按热度按时间umuewwlo1#
Akina已经给出了交集问题的解决方案,为了只使用第一个匹配项,可以使用
row_number()
window function,它为partition
(类似于group by
)生成一个唯一的编号使用以下安装脚本
选择产生
| 测试标识|恒星相|t_开始日期|t_结束日期|n_id|火山口名称|n_开始日期|n_结束日期|伦琴|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| ID4|干燥|小行星1812|小行星1833|ID4|Phoenix|小行星409万|小行星1822|1个|
| ID4|正火|小行星1833|小行星1978|ID4|奥罗拉|小行星1823|小行星1978|1个|
注意,我稍微修改了测试数据,因为它与您的描述不匹配。
See the full script on DB Fiddle.