Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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中,如何在2个月或3个月的时间段内为每周2天的重复天数设置日期范围?_Sql Server_Date_Sql Server 2005 - Fatal编程技术网

Sql server 在SQL中,如何在2个月或3个月的时间段内为每周2天的重复天数设置日期范围?

Sql server 在SQL中,如何在2个月或3个月的时间段内为每周2天的重复天数设置日期范围?,sql-server,date,sql-server-2005,Sql Server,Date,Sql Server 2005,我在Microsoft SQL Server 2005工作,需要对周二参加50+锦标赛的球员进行分析-->要获得参赛资格,他们需要在周一或周二下午2点之前获得5+分,并且积分不是累积的(周一或周二下午2点之前必须至少获得5分)。我正在使用的代码如下,但到目前为止只包含特定星期一和星期二的日期范围。我需要在2个月内的所有周一和周二。我对这一点还不熟悉(有点像是被当作额外的任务扔在我腿上,所以我必须在飞行中学习) 到目前为止,正如我所说,我已经能够成功地获得我所需要的所有信息,但它只是具体到1周。到

我在Microsoft SQL Server 2005工作,需要对周二参加50+锦标赛的球员进行分析-->要获得参赛资格,他们需要在周一或周二下午2点之前获得5+分,并且积分不是累积的(周一或周二下午2点之前必须至少获得5分)。我正在使用的代码如下,但到目前为止只包含特定星期一和星期二的日期范围。我需要在2个月内的所有周一和周二。我对这一点还不熟悉(有点像是被当作额外的任务扔在我腿上,所以我必须在飞行中学习)

到目前为止,正如我所说,我已经能够成功地获得我所需要的所有信息,但它只是具体到1周。到目前为止,我在网上找到的所有东西都比我能解释的更让人困惑,没有人引用我提供的代码,而是给了我全新的代码,我无法使用

SELECT     
     dbo.CombinedPts.Account, dbo.CombinedPts.FirstName, 
     dbo.CombinedPts.LastName, 
     ISNULL(dbo.CombinedPts.EGSPts, 0) AS EGS, 
     ISNULL(dbo.CombinedPts.IRPts, 0) AS IR, 
     DATENAME(dw, dbo.CombinedPts.Date) AS WkDay, 
     DATEDIFF(YY, dbo.PlayerMaster.Birthdate, {fn current_date()}) - CASE WHEN   (MONTH(dbo.PlayerMaster.Birthdate)=MONTH({fn current_date()}) AND DAY(dbo.PlayerMaster.Birthdate) > DAY({fn current_date()}) OR MONTH (dbo.PlayerMaster.Birthdate) > MONTH ({fn current_date()}))  THEN 1   ELSE 0   END   AS Age
FROM       
     dbo.CombinedPts, dbo.PlayerMaster 
WHERE      
     (DATEDIFF(YY, dbo.PlayerMaster.Birthdate, {fn current_date()}) >= 50) 
     AND (dbo.CombinedPts.EGSPts >= 5 OR dbo.CombinedPts.IRPts >= 5) 
     AND (dbo.CombinedPts.Account = dbo.PlayerMaster.Account) 
     AND (Date BETWEEN '10/11/2010 00:00:00' AND '10/11/2010 13:59:59' OR Date BETWEEN '10/12/2010 00:00:00' AND '10/12/2010 13:59:59') 
     AND (DATEPART(dw, dbo.CombinedPts.Date) = 2 OR DATEPART(dw, dbo.CombinedPts.Date) = 3)
GROUP BY   
     dbo.CombinedPts.Account, 
     dbo.CombinedPts.FirstName, 
     dbo.CombinedPts.LastName, 
     DATENAME(dw, dbo.CombinedPts.Date), 
     dbo.CombinedPts.EGSPts, 
     dbo.CombinedPts.IRPts, 
     dbo.PlayerMaster.Birthdate
ORDER BY
     dbo.CombinedPts.Account

作为旁注,在我们的SQL Server 2005中,我没有创建子查询的权限(我已成为UNION ALL-->的热心用户,该用户到目前为止在查询中已被证明是无用的),也没有生成表的权限,因此我所做的一切都必须在一个查询中。。。到目前为止,所有有意义的帮助都是使用表和子查询。

我不是100%清楚您想要实现什么

我想你想要这样的东西:

select *
  from CombinedPts
 where CombinedPts.Date > start_of_contest
  and CombinedPts.Date < end_of_contest
  and ( datepart( dw, CombinedPts.Date ) = 2 or datepart( h, CombinedPts.Date ) < 14 )
  and ( datepart( dw, CombinedPts.Date ) = 3 or datepart( h, CombinedPts.Date ) < 14 )
 having sum( CombinedPts.EGSPts ) >= 5
选择*
来自联合PTS
其中CombinedPts.Date>开始比赛
和组合点日期<比赛结束
和(日期部分(dw,组合点日期)=2或日期部分(h,组合点日期)<14)
和(日期部分(dw,组合点日期)=3或日期部分(h,组合点日期)<14)
总和(合并的PTS.EGSPts)>=5

这里使用Datepart来确保它在正确的日期和时间。

我不是100%清楚您想要实现什么

我想你想要这样的东西:

select *
  from CombinedPts
 where CombinedPts.Date > start_of_contest
  and CombinedPts.Date < end_of_contest
  and ( datepart( dw, CombinedPts.Date ) = 2 or datepart( h, CombinedPts.Date ) < 14 )
  and ( datepart( dw, CombinedPts.Date ) = 3 or datepart( h, CombinedPts.Date ) < 14 )
 having sum( CombinedPts.EGSPts ) >= 5
选择*
来自联合PTS
其中CombinedPts.Date>开始比赛
和组合点日期<比赛结束
和(日期部分(dw,组合点日期)=2或日期部分(h,组合点日期)<14)
和(日期部分(dw,组合点日期)=3或日期部分(h,组合点日期)<14)
总和(合并的PTS.EGSPts)>=5

这里使用Datepart来确保它在正确的日期和时间。

它的结构稍有不同,但基本相同。我使用别名而不是完整引用。它也未经测试,但解析干净

和DATEDIFF(m,cp.Date,GETDATE())<2
为您提供了2个月的窗口

编辑-添加日期和时间的子句<(2,3)中的code>AND(DATEPART(dw,cp.Date)和DATEPART(hh,cp.Date)>14)只提供周一和周二下午2:00(1400小时)之后的信息

选择cp.帐户
,cp.FirstName
,cp.LastName
,ISNULL(cp.EGSPts,0)作为EGS
,ISNULL(cp.IRPts,0)作为IR
,DATENAME(dw,cp.Date)作为工作日
,DATEDIFF(YY,pm.Birthdate,GETDATE())
-案例时间(月(pm.Birthdate)=月(GETDATE())
和日期(pm.Birthdate)>日期(GETDATE())
或月(pm.Birthdate)>月(GETDATE())
那么1
其他0
寿终正寝
来自dbo.CombinedPts cp
在cp.Account=pm.Account上加入dbo.PlayerMaster pm
其中DATEDIFF(YY,pm.Birthdate,GETDATE())>=50
和(cp.EGSPts>=5或cp.IRPts>=5)
(2,3)中的日期部分(dw,cp.Date)和(hh,cp.Date)>14)
和DATEDIFF(m,cp.Date,GETDATE())<2
按cp账户分组
,cp.FirstName
,cp.LastName
,DATENAME(dw,cp.Date)
,cp.EGSPts
,cp.IRPts
,下午,生日
按cp帐户订购

结构略有不同,但基本相同。我使用别名而不是完整引用。它也未经测试,但解析干净

和DATEDIFF(m,cp.Date,GETDATE())<2
为您提供了2个月的窗口

编辑-添加日期和时间的子句<(2,3)中的code>AND(DATEPART(dw,cp.Date)和DATEPART(hh,cp.Date)>14)只提供周一和周二下午2:00(1400小时)之后的信息

选择cp.帐户
,cp.FirstName
,cp.LastName
,ISNULL(cp.EGSPts,0)作为EGS
,ISNULL(cp.IRPts,0)作为IR
,DATENAME(dw,cp.Date)作为工作日
,DATEDIFF(YY,pm.Birthdate,GETDATE())
-案例时间(月(pm.Birthdate)=月(GETDATE())
和日期(pm.Birthdate)>日期(GETDATE())
或月(pm.Birthdate)>月(GETDATE())
那么1
其他0
寿终正寝
来自dbo.CombinedPts cp
在cp.Account=pm.Account上加入dbo.PlayerMaster pm
其中DATEDIFF(YY,pm.Birthdate,GETDATE())>=50
和(cp.EGSPts>=5或cp.IRPts>=5)
(2,3)中的日期部分(dw,cp.Date)和(hh,cp.Date)>14)
和DATEDIFF(m,cp.Date,GETDATE())<2
按cp账户分组
,cp.FirstName
,cp.LastName
,DATENAME(dw,cp.Date)
,cp.EGSPts
,cp.IRPts
,下午,生日
按cp帐户订购

您可以加入dbo.CombinedPts、dbo.PlayerMaster的哪个栏目?您是否在Management Studio中运行此操作?我不知道子查询可能会被权限拒绝…您确定这是权限错误,而不是子查询中的语法错误吗?我们在网络上运行它,并以某种方式将其设置为只有一个人(我们的it主管)可以编辑任何内容,即我无法在SQL Server 2005中保存任何内容,因此也无法创建子查询,因为它不允许我链接它们,因为它们未保存。他一直告诉我他会修复它,这样我就可以使用视图和设计(它也不允许我这么做),这样我就可以保存表和子查询,但实际上不会对数据库进行更改,但这还没有发生。你可以加入dbo.CombinedPts、dbo.PlayerMaster上的哪个列?您是否在Management Studio中运行此操作?我不知道子查询可能会被权限拒绝…您确定这是权限错误,而不是子查询中的语法错误吗?我们在网络上运行它,并以某种方式将其设置为只有一个人(我们的it主管)可以编辑任何内容,即我无法在SQL Server 2005中保存任何内容,因此