【问题标题】:sql calculate delta between the column value for one day and the previous daysql计算一天与前一天的列值之间的增量
【发布时间】:2013-07-09 09:37:00
【问题描述】:

我有一个这样的查询:

;WITH A AS (SELECT * FROM T1 where T1.targetDate=@inputdate), 
      B AS (SELECT A.*, T2.SId, T2.Type, T2.Value
            FROM A 
            INNER JOIN T2 ON A.SId = T2.SId )
SELECT A.*, B.Type, B.Value 
FROM B

我的问题是,如何获取Value@inputdate 和前一天(DATEADD(day, -1, @inputdate )) 之间的增量,而不是获取@inputdate,Value

已编辑

抱歉不清楚,'Value' 是 int 类型。例如,如果@inputdate = '20130708','20130708' 的Value 是 30,而前一天 '20130707' 的 'Value' 是 20,所以它应该返回 (30 - 20),即 10。

【问题讨论】:

  • 请添加架构。有 20 和 30 的列是什么?您正在使用 2 个不同的表,CTE A 使用表 T1CTE B 使用表 T2

标签: sql datetime delta


【解决方案1】:

类似这样,并假设 Value 是 DATE 格式

;WITH A AS (SELECT * FROM T1 where T1.targetDate=@inputdate), 
      B AS (SELECT A.*, T2.SId, T2.Type, T2.Value
            FROM A 
            INNER JOIN T2 on A.SId = T2.SId )
SELECT A.*, T2.Type, T2.Value, DATEDIFF(DAY, b.Value, DATEDADD(DAY, -1,@InputDate)) AS Delta
FROM B

【讨论】:

  • 已编辑,忘记加DATEADD(day, -1 @InpuDate)
  • 抱歉不清楚,'Value' 是 int 类型。我已经相应地编辑了问题。
【解决方案2】:

假设您有一个股票价格表:其中包含代码、日期和收盘价等,您可以使用以下内容:

select symb, ret_dt, close, (close-(lead(close,1) over (partition by symb order by ret_dt desc,close)))as difference, (lead(close,1) over 
(partition by symb order by ret_dt desc,close)) as lead
from stocks.nyse2010;

注意:这里ret_dt 是日期,收盘价是收盘价,我已经添加了一个额外的引导列用于表示目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-11-06
    相关资源
    最近更新 更多