【发布时间】:2015-09-07 14:05:00
【问题描述】:
我的开始日期是 2009-04-01(2009 年 4 月 4 日),结束日期是 getdate()。
我需要计算从开始日期到今天的每个日期的一些事情。 我还需要把它分成两种情况:
案例1:如果是星期五我需要返回347天,例如
select datediff(dw, '2010-11-22','2011-11-04')
每个星期五,然后执行一些选择。
案例 2:如果是从周一到周四,则返回 349 天,例如
select datediff(dw, '2010-11-19','2011-11-03')
我怎么写这个,我需要执行的东西不相关,只是把它写成:
declare @startDate date
declare @endDate date
declare @dateHolder date
declare @tsID int
set @startDate = '2009-04-01'
set @endDate = getdate()
set datefirst 1;
while (select count (tsID) from #tempI)>0
begin
select top 1 @tsID = tsID from #tempI
while (select count (rateDate) from #tempI)>0
begin
select top 1 @dateHolder = rateDate from #tempI
case (select datename (dw, @dateHolder) = '5' then someColumn = @dateHolder - 347 as dateIneedToUseForMyFormula
case (select datename (dw, @dateHolder) = '1' or '2' or '3' or '4' then someColumn = @dateHolder - 349 as dateIneedToUseForMyFormula
-- here i don't know how to write the code, so i'll write pseudo
-- i have tsID rateDate and rate
-- i need to put in a new column (the value obtained from taking the value
-- from the column rate corresponding to the @dateHolder - the value from
-- the column rate corresponding to the @dateHolder - 347 or 349
-- depending on the case) * 100
end
delete from #tempI where @dateHolder = rateDate
end
delete from #tempI where @tsID = tsID
end
编辑 在 cmets 中我被问到该做什么,并且考虑到反对票,我认为我没有说清楚。我将复制粘贴我在评论中写的内容: " 首先遍历列表中的所有 tsID,然后遍历所有日期,得到一个从中减去 349 或 347 天的日期,然后检查将结果放入一个新列:'rate'的值对应于我的日期的列 - 对应于 349 或 347 天前的日期的“比率”列的值。这对每个 id 的所有日期执行“
编辑 2:预期输出
tsID rateDate rate calculated
1 2009-04-01 0.12 null
1 2009-04-02 0.14 null
1 2009-04-03 0.11 null
2 2009-04-01 0.01 null
2 2009-04-02 0.012 null
2 2009-04-03 0.43 null
. . . 347 days later or 349 depending
on what 2009-04-01 was
1 2010-03-16 0.454 (0.454 - 0.12)*100
1 2010-03-17 0.34 (0.34 - 0.14)*100
1 2010-03-18 0.9 (0.9 - 0.11)*100
then same for id 2.3...4...
【问题讨论】:
-
请确定您使用的 sql server 版本。
-
SQL sever 2012,语法不应该与 2008 相差太大 :)
-
提示:您可能需要考虑使用
DatePart并比较整数,而不是摆弄DateName和字符串。
标签: sql sql-server tsql sql-server-2012