SQL从2个相同的表(具有不同的数据)中按人分组获得最大日期

时间:2018-10-11 10:33:00

标签: sql sql-server

我在MSSQL中有一个非常简单的模型

表1(约1000行) ID,PersonId,时间

表2(约10.000.000行) ID,PersonId,时间

我需要根据这两个表中的数据为每个人提供最新条目(时间)。如果可以提高性能,我可以补充说table1明显小于Table2。但是没有规则,最新的条目位于表1或表2中。

这让我感到一个相当简单的查询,但是我根本无法破解它(没有看似复杂的措施)。有输入吗?

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);