Sql server 找出月与月之间的差距

Sql server 找出月与月之间的差距,sql-server,Sql Server,我有一个带有日期字段、人名和唯一标识符的SQL Server表。所有日期均在2015年内,并以周末日期为准。例如2015-12-05,然后是2015-12-12。我需要找到一个唯一标识符的列表,其中至少有3个月的数据间隔 因此,如果唯一标识符A的条目为2015-12-12和2015-07-25,那么我希望在结果中看到它。如果它的条目更加一致,比如说每月一周,那么我不想在我的结果中看到它。我需要在2015年的任何地方显示所有唯一标识符,间隔3个月 我真的不知道从哪里开始。有什么想法吗?您对此有何看

我有一个带有日期字段、人名和唯一标识符的SQL Server表。所有日期均在2015年内,并以周末日期为准。例如2015-12-05,然后是2015-12-12。我需要找到一个唯一标识符的列表,其中至少有3个月的数据间隔

因此,如果唯一标识符A的条目为2015-12-12和2015-07-25,那么我希望在结果中看到它。如果它的条目更加一致,比如说每月一周,那么我不想在我的结果中看到它。我需要在2015年的任何地方显示所有唯一标识符,间隔3个月


我真的不知道从哪里开始。有什么想法吗?

您对此有何看法:

ANSI 89

ANSI 92


你需要更多的解释吗?

我建议你这样使用APPLY:

从t1中选择DISTINCT t1.id 交叉应用从t中选择前1个t.日期 式中,t.id=t1.id,t.date=3
我最终使用了Rank函数,并对表中每个标识符存在的月份进行了排序。比如说,

select identifier,month,RANK() OVER (PARTITION BY identifier ORDER BY month ) rnk
然后我将这个查询中的所有数据上传到一个临时表中。然后我使用lead和lag函数拉取上一个月的行和下一个月的行。 确保所有数据都已正确排序。我也把它插入了临时表

select identifier,rnk,lag(month) over (order by identifier) PreviousMonth,month,lead(month) over (order by identifier) NextMonth from #table group by identifier,month,rnk
然后我查询了临时表,以显示3个月或更大的差距

select identifier, PreviousMonth,NextMonth,Month-PreviousMonth as Month_Gap from #table2 where month-PreviousMonth >0 and month-PreviousMonth >=3 and rnk>1
我希望这有帮助,也有意义。 因此,我的最终输出结果如下所示


这是一个很好的起点。如果不存在,则是一个好主意。是每行还是每个人的唯一标识符?请为该表发布表结构CREATE语句即可。t1和t2是同一个表上的联接吗?这实际上不起作用。如果在6个月内每个月都有一个条目,那么仍然会返回一些结果。它还使用旧的ANSI-89样式连接。
select identifier,rnk,lag(month) over (order by identifier) PreviousMonth,month,lead(month) over (order by identifier) NextMonth from #table group by identifier,month,rnk
select identifier, PreviousMonth,NextMonth,Month-PreviousMonth as Month_Gap from #table2 where month-PreviousMonth >0 and month-PreviousMonth >=3 and rnk>1