编辑:我正在使用teradata sql assistant
我有两张table表1和表2
表1:
表2:
我想左连接表1和表2,这样我总是从表2中获取最近日期的记录。最终结果应该是这样的:
如何指定联接条件?
SELECT DISTINCT
TABLE_1.COLUMN_NUM,
TABLE_2.COLUMN_2
FROM TABLE_1
LEFT JOIN TABLE_2
ON TABLE_1.COLUMN_NUM=TABLE_2.COLUMN_1
AND TABLE_2.DATE = (MAXIMUM DATE FROM TABLE_2)
4条答案
按热度按时间klh5stk11#
您要编写的查询似乎是:
不过,它的缺点是需要对图像进行两次扫描
table_2
. 对于此数据集和预期结果集,我建议使用带有行限制子句的相关子查询:这是一种跨数据库的方法,尽管行限制子句的语法可能会有所不同:上面的方法可以在mysql和postgres中使用,而sqlserver需要
select top (1) ... from ... where ... order by ...
.此查询将利用上的索引
table_2(column_1, date, column_2)
(这里索引中列的顺序很重要)。此查询将利用上的索引
table_2(column_1, date, column_2)
(这里索引中列的顺序很重要)。如果您的数据库支持窗口函数,您还可以
join
使用row_number()
:inn6fuwd2#
我不知道你用的是哪一个数据库,但用的是postgresql
SELECT DISTINCT ON ( TABLE_1.COLUMN_NUM)TABLE_1.COLUMN_NUM, TABLE_2.COLUMN_2 FROM TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.COLUMN_NUM=TABLE_2.COLUMN_1 ORDER BY TABLE_2.DATE DESC
2exbekwf3#
您可以尝试以下语句:
aemubtdh4#
这与gmb的第3个查询相同,只是在使用teradata专有的qualify子句进行连接之前进行过滤: