Sql server 用于检查是否有少于两条记录的四周的存储过程
我正在处理一个存储过程。输入将是一个日期和ID,如果有4周,每周输入少于2个,则程序将设置一个值为true。 它必须考虑到我可能会通过一个数据库中没有记录的早期日期。 我无法格式化代码。我不知道为什么? 到目前为止,我是在你们之前的帮助下得到的:Sql server 用于检查是否有少于两条记录的四周的存储过程,sql-server,Sql Server,我正在处理一个存储过程。输入将是一个日期和ID,如果有4周,每周输入少于2个,则程序将设置一个值为true。 它必须考虑到我可能会通过一个数据库中没有记录的早期日期。 我无法格式化代码。我不知道为什么? 到目前为止,我是在你们之前的帮助下得到的: CREATE proc [dbo].[sp_test] (@id int, @d date) as declare @WeekFirstRecord as int declare @WeeksWithNoRecords as int SET @Wee
CREATE proc [dbo].[sp_test] (@id int, @d date)
as
declare @WeekFirstRecord as int
declare @WeeksWithNoRecords as int
SET @WeekFirstRecord = datepart(week,(select Min(ZeroPointIncidentDate) from EmployeeZeroPointIncidents where ZeroPointIncidentDate > @d))
SET @WeeksWithNoRecords = datepart(week, @WeekFirstRecord) - datepart(week, @d)
select case when sum(c) + @WeeksWithNoRecords >= 4 then 'true' else 'false' end status
from (
select c = count(*) over (partition by EmpId, datepart(week, ZeroPointIncidentDate))
from EmployeeZeroPointIncidents
where EmpId = @id and ZeroPointIncidentDate >= @d
) a
where c = 1
在我的数据中,只有带有星星的几周的输入少于两个,如果我通过日期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 *
如果我有7月13日-无记录周7月20日-无记录周7月27日-2记录周8月3日-无记录周8月10日-2记录周8月17日-无记录和通过7月12日日期应返回true,如果我通过了7月15日的考试,我应该返回false我必须查看你上一个问题的样本数据集,以及你上一个问题的解释,以及这个问题中给出的解释,才能得出这个解决方案 当你在这里问问题时,请设身处地为读者着想,看看这个问题是否有意义,无论如何,我希望这个解决方案能让你得到你想要的。干杯
CREATE PROCEDURE get_output
@Date DATE
,@ID INT
,@Output INT OUTPUT -- 1 true , 0 false
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Count INT;
SELECT @Count = COUNT(*)
FROM TableName
WHERE CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, @Date), 0) AS DATE)
= CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, [Date]), 0) AS DATE)
AND ID = @ID
GROUP BY CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, [Date]), 0) AS DATE)
IF (@Count < 2)
SET @Output = 1;
ELSE
SET @Output = 0;
END
当您说如果有4周的时间,每周输入少于2个,这根本没有任何意义,那么您传递给存储过程的这些参数在这4周内必须执行哪些操作?从你通过的日期算起,这4周你是怎么计算的?你能展示一些样本数据和期望输出吗?你能解释一下你所展示的期望输出吗?提问时,你真的应该记住接受答案。我相信我接受了答案。我没有使用太多的堆栈溢出,如果我犯了任何错误,我很抱歉我有7月13日-无记录周7月20日-无记录周7月27日-2记录周8月3日-无记录周8月10日-2记录周8月17日-无记录和通过7月12日日期应返回true,如果我通过了7月15日的考试,你在今天早上早些时候问过这个问题,你的样本数据没有任何意义,请提供更人性化的样本数据,并解释你使用的术语,如果有4周,每周输入少于2次,如果您没有这样做,我将投票结束这个问题,因为不清楚您在问什么,谢谢。正如@t-clausen.dk提到的,您还没有接受您之前提出的问题的任何答案,接受一个有助于您的答案表示该解决方案是否适用于其他用户,社区正在帮助你解决你的问题,你应该通过积极发挥你的作用来帮助社区。谢谢你的帮助,但是proc没有做我需要的。我需要一个proc来计算我的案例中少于2个记录事件的周数,如果少于4周,则返回false。如果我在6周前通过了一个日期,第一周没有记录,第二周有两个记录,第三周没有记录,第四周有两个记录,第五周没有记录,第六周有一个记录。回报一定是真的嘿,伙计们,我被卡住了。任何帮助都将不胜感激。