我有一个包含两个变量的存储过程。它们是@DateLeft
和@DateRight
。 @DateLeft
是我想要设置的变量,等于查询结果。@DateRight = GETDATE()
。我有以下数据:
编辑2:添加了“距离”列
Date Code Distance **The values in the distance column are arbitrary and they are there for example's sake
11/23/2015 A 456
12/28/2015 B 2163
1/25/2016 C 203
4/30/2015 D 8921
我的存储过程应该使用@DateLeft
和@DateRight
来确定控制其他计算的日期范围。这些日期是特定事件发生的最近日期。我应该使用Date
列中的日期作为@DateLeft
列中每个不同代码的Code
值。例如,该过程应该运行并获取11/23/2015
作为代码@DateLeft
的{{1}}的值。然后,它将进行计算并继续前进,并为代码A
获取12/28/2015
,依此类推。我不知道如何执行此计算,因此它不必再次运行整个过程来使用B
的不同日期进行计算。我对最终结果的查询看起来像这样:
@DateLeft
我想做这样的事情(我当然愿意接受建议):
SELECT SUM(TraveledDistance) AS Distance, Code
FROM MyTable
WHERE
Time BETWEEN @DateLeft AND @DateRight
感谢任何帮助。
编辑:程序说明本身
该过程采用SET @DateLeft = Select Date From SampleTable
Group By Code --I know this doesn't work
值(当前,不一个参数)并将其用作过滤器来计算该日期与今天日期之间的距离( @DateLeft
)。如果需要,您可以组成计算部分。我更关心的是我应该采用的方法将@DateRight
设置为每个代码的每个不同日期,而不必多次重复该过程。
答案 0 :(得分:1)
df1[-1] <- df1[-1]/df1[df1$v1=='ABC', -1][col(df1[-1])]
您可以使用此语法设置变量值。
根据OP的更新进行更新:
OP的更新请求并不是很清楚,但我相信一个循环可以解决这个问题。
DECLARE @DateLeft DATE;
SELECT @DateLeft = [Date] From SampleTable Group By Code
答案 1 :(得分:0)
如果你需要像循环那样做,你可能需要查看SQL Server Cursor。
如果您不需要循环,您可以随时为变量选择值:
declare @DateLeft as datetime;
SELECT @DateLeft = Date
From SampleTable
Group By Code;
答案 2 :(得分:0)
也许这就是你要找的东西?:
select
(
/* calculation goes here */
select sum(m.TraveledDistance) as Distance
from MyTable m
/* correlate the subquery on t.Code and max t.Date */
where m.Code = t.Code and m.Time between max(t.Date) and getdate()
) as Calculation,
t.Code
from SampleTable t
group by t.Code
答案 3 :(得分:-2)
您的方法如下:SET @DateLeft =(按代码从样本表组中选择日期)