MS SQL Server中的基本光标

时间:2013-09-09 14:52:04

标签: sql sql-server tsql cursor

我正在寻找MSSS中光标使用的基本方向。

假设有一个表TABLE1,包含2个字段(IDDate)。 ID 不是唯一键。该表通过id记录事件,并且一些id经常发生,一些不经常发生。

例如:

ID  |  Date
1   |  2010-01-01
2   |  2010-02-01
3   |  2010-02-15
2   |  2010-02-15
4   |  2010-03-01

我想创建一个包含以下字段的新表:ID,日期,ID在日期之前6个月内出现的次数,ID出现在Date之后6个月内的次数。

有没有最好的方法来实现这个目标?谢天谢地。

1 个答案:

答案 0 :(得分:1)

这是一方(我认为 - 未经测试)

select t1.id, t1.date, count(*) as 'count'
from table t1 
join table t2 
  on t2.id = t1.id
 and DateDiff(mm,t1.date,t2.date) <= 6 
 and DateDiff(mm,t1.date,t2.date) >  0 
group by t1.id, t1.date

我认为你可以跳过&gt; 0和用例计算正负

sum(WHEN t1.date > t2.date then 0 else 1) as prior 
sum(WHEN t1.date < t2.date then 0 else 1) as next 

and DateDiff(mm,t1.date,t2.date) <= 6 
and DateDiff(mm,t2.date,t2.date) <= 6 

可能有前一个和下一个后退