【问题标题】:How to get previous row value如何获取上一行的值
【发布时间】:2011-06-19 02:28:50
【问题描述】:

如何从 SELECT 语句的前一个结果行中获取值

如果我们有一个名为 cardevent 的表并且有行 [ID(int) , Value(Money) ] 并且我们在其中有一些行,例如

ID --Value

1------70 
1------90
2------100
2------150
2------300 
3------150 
3------200 
3-----250 
3-----280

等等……

如何进行一个查询,获取每个行 ID、值和数据出现的前一行值如下

ID --- Value ---Prev_Value

1 ----- 70 ----------  0 
1 ----- 90 ---------- 70
2 ----- 100 --------  90 
2 ------150 -------- 100
2 ------300 -------- 150
3 ----- 150 -------- 300 
3 ----- 200 -------- 150 
3 ---- 250 -------- 200 
3 ---- 280 -------- 250

等等。

那么任何人都可以帮助我为此类问题找到最佳解决方案吗?

需要查询帮助

【问题讨论】:

标签: sql sql-server sql-server-2005


【解决方案1】:

你必须自己加入表,我不确定这是否是 100% 合法的 SQL,但我目前没有 SQL-Server 可以尝试,但试试这个:

select (ID, Value) from table as table1 join
inner join table as table2
on table1.ID = (table2.ID -1)

【讨论】:

    【解决方案2】:

    您可以使用 LAG() 和 LEAD() 函数来获取上一个和下一个值。

    SELECT 
       LAG(t.Value) OVER (ORDER BY t.ID) PreviousValue,
       t.value Value,
       LEAD(t.value) OVER (ORDER BY t.ID) NextValue
    FROM table t
    
    GO
    

    【讨论】:

    【解决方案3】:
    select t1.value - t2.value from table t1, table t2 
    where t1.primaryKey = t2.primaryKey - 1
    

    试试这个。

    【讨论】:

      【解决方案4】:
      SELECT t.*,
              LAG(t.Value) OVER (ORDER BY t.ID)
       FROM table AS t
      

      这应该可行。 Lag 函数获取特定列的前一行值。我想这就是你想要的。

      【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2013-12-28
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多