Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 简单的SELECT语句可获取任意月份的最后一个星期三_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 简单的SELECT语句可获取任意月份的最后一个星期三

Sql 简单的SELECT语句可获取任意月份的最后一个星期三,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个表,每个星期三都会填充数据。所以我需要获取上周三到最近周三的数据 例如:如果今天是2013年6月6日星期四,则我需要获取2013年5月29日的数据,即上个月的最后一个星期三,即2013年5月5日至2013年6月5日的昨天 我试过了 选择dateadddd,datediffdd,0,'GetDate'/7*7+2,0,这将给出2013年6月5日 选择dateaddwk,-1,datediffdd,0,'GetDate'/7*7+2,这将给出2013年5月29日 在代码中,dateadddd

我有一个表,每个星期三都会填充数据。所以我需要获取上周三到最近周三的数据

例如:如果今天是2013年6月6日星期四,则我需要获取2013年5月29日的数据,即上个月的最后一个星期三,即2013年5月5日至2013年6月5日的昨天

我试过了

选择dateadddd,datediffdd,0,'GetDate'/7*7+2,0,这将给出2013年6月5日 选择dateaddwk,-1,datediffdd,0,'GetDate'/7*7+2,这将给出2013年5月29日

在代码中,dateadddd,datediffdd,0,'GetDate'/7*7转到一周的第一天,在本例中,它是星期一,通过添加+2,它给出星期三的日期

问题代码工作正常,除了星期一

例如:考虑下星期一,即10/06/2013,

它给出了从昨天的2013年6月5日到下周三的2013年6月12日的结果 相反,我需要的是2013年5月29日,即上周三到2013年6月5日的前一周


有什么想法吗?

所以数据每天都填充,但您只关心周三?所以数据每天填充,但您只关心周三?缺少逗号:选择dateadddd,datediffdd,0,将'20130520'转换为DATETIME-2/7*7, + 2.0@GordonLinoff:当我对背景中发生的事情感到困惑时,你能告诉我这个查询背后的逻辑吗?逗号缺失:选择dateadddd,datediffdd,0,将'20130520'转换为DATETIME-2/7*7,+2。0@Gordon林诺夫:你能告诉我这个问题背后的逻辑吗?我对背景中发生的事情感到困惑
DECLARE @ActualDatePayable DATETIME,@LASTDateMonth DATETIME

SET @ActualDatePayable='02/01/2013'

SET @LASTDateMonth=DATEADD(d,-1,DATEADD(m,1,@ActualDatePayable))

SET @ActualDatePayable=(select MAX(date) AS LastWednesday from (

select dateadd(day,number,@ActualDatePayable) as date from master..spt_values 
where type='p' and number < DAY(@LASTDateMonth) ) t
where   datename(weekday,date) = 'Wednesday')

SELECT @ActualDatePayable