存储过程检查每周是否少于一个日期入口

时间:2015-08-21 00:24:08

标签: sql-server stored-procedures

我正在处理存储过程。输入将是一个日期和ID,如果有4周每周少于2个输入,则该过程将设置为true。

在我的数据中,只有星星的星期少于两个输入,如果我通过日期7-7-2015将输出值设置为真

任何帮助将不胜感激。我是否需要遍历每条记录并设置一个计数器,如果少于两个输入或者有更简单的方法?

ID      Date

1       7-7-2015    
2       6-23-2015
3       6-12-2015
1       7-8-2015
1       7-14-2015    *
1       7-21-2015    *
1       7-27-2015
1       7-28-2015
1       7-29-2015
1       7-30-2015
1       8-3-2015     *
1       8-11-2015    *

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但是应该使用的一种方法是在派生表中使用窗口化聚合函数(count),然后将计数为1的行总和,如果总和为>则返回true。 = 4.这样的事情:

create proc sp_test (@id int, @d date)
as 
select case when sum(c) >= 4 then 'true' else 'false' end status
from (
    select c = count(*) over (partition by id, datepart(week, date))
    from t -- this is your table 
    where id = @id and date >= @d
) a
where c = 1
go

使用以下方式执行:

exec sp_test @id = 1, @d = '2015-07-07'