SQL Server 查询以查找间隔或 12 个月或更长时间的记录

Posted

技术标签:

【中文标题】SQL Server 查询以查找间隔或 12 个月或更长时间的记录【英文标题】:SQL Server query to find records with gap or 12 months or greater 【发布时间】:2016-02-02 14:32:24 【问题描述】:

我有一个记录表,每条记录都有一个创建日期和一个用户 ID。

我正在尝试查找该给定用户的记录之间存在 12 个月或更大间隔的所有记录。我在 SQL Server 中编写的最简单的方法是什么?

select * 
from records 
where last record and lastest record is greater than 12 months.

【问题讨论】:

【参考方案1】:

您正在寻找lag()lead() 函数。这在 SQL Server 2012+ 中可用。

select r.*
from (select r.*,
             lag(createddate) over (partition by userid order by createddate) as last_createddate
      from records r
     ) r
where last_createddate is null or
      last_createddate < dateadd(year, -1, createddate);

在早期版本的 SQL Server 中,您可以使用 outer apply 模拟逻辑,尽管性能通常更差。

【讨论】:

以上是关于SQL Server 查询以查找间隔或 12 个月或更长时间的记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 查询以查找列中包含非字母数字字符的行

前 3 个月的滚动总和 SQL Server

SQL Server 查询以查找数据库中所有用户的所有权限/访问权限

在SQL Server中,在当天的基础上加上1个月时间,这是用哪个函数?

以固定时间间隔更新表 SQL Server

sql 查询中 有12个月表 写一个查询从中提取所有日期