考虑到我有这些记录 表人(ID,姓名,日期(
1- 标记 2017年10月1日05:00 1标记
- 2017年10月1日05:01 1标记
- 2017-10-1 05:02 1标记
2017-10-1 05:03
2 Joni 2017年10月1日05:00
- 2 乔尼 2017年10月1日05:01
- 2 乔尼 2017年10月1日05:02
- 2 Joni 2017年10月1日05:03
我想要的查询结果是:
1标记- 2017-10-1 05:03
- 2 Joni 2017年10月1日05:03
我只想得到两条记录(一条用于标记,一条用于 joni(,因为它们具有相同的 id 并且日期差异小于或等于 3 分钟 如何编写此查询
我通过声明表在其中插入所有记录而不是在每个记录中循环并检查是否有任何其他记录具有相同 id 且差异日期为 3 分钟来创建解决方案,因此如果存在,我会删除该记录。
但是这个解决方案太长了,占用了太多的资源(时间(,我正在寻找更好的解决方案
这是一个 sql 服务器查询。您可能需要将datediff
更改为 DBMS 的相应功能。我假设您需要最新的(如您想要的输出2017-10-1 05:03
所示(行,该行在给定 id 的 3 分钟内具有前一行。
select id, name, dt
from (
select id, name, dt, row_number() over(partition by id order by dt desc) rn
from (
select id, name, dt
, datediff(minute, lag(dt) over(partition by id order by dt), dt) diff
from people
) p
where diff <= 3
) p
where rn=1;