【问题标题】:Filtering SQL Server rows based on timestamp根据时间戳过滤 SQL Server 行
【发布时间】:2025-12-30 06:30:07
【问题描述】:

我有一个基于时间戳的查询。

有时我通过 SQL Server 存储过程进行的更新会在同一秒内命中两次,因此会生成时间戳相同的行,而时间戳仅相差几秒。知道如何创建一个WHERE 子句来过滤掉与上一行的时间戳距离小于一分钟的行吗?谢谢。

timestamp item bought
3/15/2021 3:08:43 PM Grape
3/15/2021 3:30:58 PM Apple
3/15/2021 3:30:59 PM Apple
3/15/2021 3:50:29 PM Passionfruit
3/15/2021 4:29:47 PM Orange

这是我正在使用的当前数据库。我想在同一秒内过滤掉显示 Apple 重复的部分。我目前也在努力改变存储过程,但同时我可以过滤掉查询结果,让它看起来像这样吗?

timestamp item bought
3/15/2021 3:08:43 PM Grape
3/15/2021 3:30:58 PM Apple
3/15/2021 3:50:29 PM Passionfruit
3/15/2021 4:29:47 PM Orange

【问题讨论】:

  • 请标记您正在使用的数据库。
  • 请不要将图像用于代码、数据或错误。并展示示例数据、预期结果和您的尝试。

标签: sql sql-server timestamp filtering where-clause


【解决方案1】:

你可以使用lag():

select t*
from (select t.*,
             lag(timetamp) over (partition by timestamp) as prev_timestamp
      from t
     ) t
where t.timestamp < dateadd(second, 60, prev_timestamp ) or
      prev_timestamp is null;

【讨论】:

  • 感谢您的快速回复,我正在使用 MS SQL。
最近更新 更多