我在DB2v11上有一个非常大的事务表,我需要尽可能高效地查询其中的一个子集。我所需要的只是集合的总数(事先不知道,这是基于标准的,比如说1天(、第一条记录的ID和最后一条记录的ID。旧的代码获取整个表,然后只使用第一个记录ID、最后一个记录ID和大小,而不使用其余的。现在这个代码超时了。这是一个由多个联接组成的复杂查询。有没有一种方法可以在一个选择查询中获取集合、第一条记录、最后一条记录的大小?我读过为了获取第一条记录而重新排序列表(所以使用Desc获取,然后更改为Asc(是无效的。
示例表1 TRANSACTION_RECORDS:
tdID TIMESTAMP name
-------------------------------
123 2020-03-31 john
234 2020-03-31 dan
456 2020-03-01 Eve
675 2020-04-01 joy
示例表2 TRANSACTION_TYPE:
invoiceId tdID account
------------------------------
897 123 abc
898 123 def
877 234 mnc
899 456 opp
样本查询
select Min(tr.transaction_id), Max(tr.transaction_id)
from TRANSACTION_RECORDS TR
join TRANSACTION_TYPE TT
on TR.tdID=tt.tdID
WHERE Date(TR.TIMESTAMP) = '2020-03-31'
group by tr.tdID
order by TR.tdID ASC
这会导致多个列,(但需要分组依据(
123,123
234,234
456,456
我想要的是:
123,456
正如我在评论中提到的,对于这个查询,您不需要Group BY,也不需要Order BY,只需执行:
select Min(tr.transaction_id), Max(tr.transaction_id)
from TRANSACTION_RECORDS TR
join TRANSACTION_TYPE TT
on TR.tdID=tt.tdID
WHERE Date(TR.TIMESTAMP) = '2020-03-31'
它应该按预期工作