我正在处理存储过程。输入将是一个日期和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 *
答案 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'