Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 用于检查是否有少于两条记录的四周的存储过程_Sql Server - Fatal编程技术网

Sql server 用于检查是否有少于两条记录的四周的存储过程

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

我正在处理一个存储过程。输入将是一个日期和ID,如果有4周,每周输入少于2个,则程序将设置一个值为true。 它必须考虑到我可能会通过一个数据库中没有记录的早期日期。 我无法格式化代码。我不知道为什么? 到目前为止,我是在你们之前的帮助下得到的:

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周前通过了一个日期,第一周没有记录,第二周有两个记录,第三周没有记录,第四周有两个记录,第五周没有记录,第六周有一个记录。回报一定是真的嘿,伙计们,我被卡住了。任何帮助都将不胜感激。