DB2:选择table1日期早于table2中日期的行

vmpqdwk3  于 2023-04-30  发布在  DB2
关注(0)|答案(1)|浏览(86)

我正在尝试优化我的SQL查询,以便在一个包含10,000条记录的大型DB2表中使用。我需要从表1中提取行,其中的日期比表2中的行早。表2可以有许多最近的行,但我只关心表1的数据。我有一个查询,但它真的很慢,我希望进一步优化它。我采用了这种方法:

SELECT * FROM TABLE1 t1
WHERE t1.START_DATE < (
    SELECT MAX(DATE(t2.TIMESTAMP_DATE))
    FROM TABLE2 t2
    WHERE t1.NAME = t2.NAME
);

下面是一个示例数据集,它在低容量下运行良好,但我的大数据集运行得太慢了。..
表1:
| 名称|开始日期|
| --------------|--------------|
| 约翰|2018-01-01 2018-01-01|
| 吉姆|2019-01-01 2019-01-01|
| 亚历克斯|2023-01-01 2023-01-01|
表2:
| 名称|时间戳_日期|
| --------------|--------------|
| 约翰| www.example.com |
| 约翰| www.example.com |
| 约翰| www.example.com |
| 吉姆| www.example.com |
| 吉姆| www.example.com |
| 亚历克斯| www.example.com |
因此,从我的查询中,我想提取以下数据集:
| 名称|开始日期|
| --------------|--------------|
| 约翰|2018-01-01 2018-01-01|
| 吉姆|2019-01-01 2019-01-01|
我可以得到任何提示来优化两个表中的大规模数据集吗?

y3bcpkx1

y3bcpkx11#

从T2建立一个名字和最大日期列表并加入更有效,请尝试以下操作:

select
  t1.* 
from table1 t1
inner join (
  select 
    name,
    date(max(timestamp_date)) maxdate
  from table2 t2
  group by name
) b on b.name = t1.name
where t1.start_date < b.maxdate

相关问题