我在MSSQL中有一个非常简单的模型
表1(约1000行) ID,PersonId,时间
表2(约10.000.000行) ID,PersonId,时间
我需要根据这两个表中的数据为每个人提供最新条目(时间)。如果可以提高性能,我可以补充说table1明显小于Table2。但是没有规则,最新的条目位于表1或表2中。
这让我感到一个相当简单的查询,但是我根本无法破解它(没有看似复杂的措施)。有输入吗?
答案 0 :(得分:2)
我将使用union all
并进行聚合:
select max(id), PersonId, max(time)
from (select t1.id, t1.PersonId, t1.Time
from table1 t1
union all
select t2.id, t2.PersonId, t2.Time
from table2 t2
) t
group by PersonId;
编辑:您可以将row_number()
功能与ties
一起使用:
select top (1) with ties t.*
from ( . . .
) t
order by row_number() over (partition by PersonId order by time desc);
答案 1 :(得分:1)
一种方法在row_number()
版本的结果上使用union all
:
select top (1) with ties t.*
from (select t1.id, t1.PersonId, t1.Time
from table1 t1
union all
select t2.id, t2.PersonId, t2.Time
from table2 t2
) t
order by row_number() over (partition by PersonId order by time desc);