如何在不使用滞后的情况下在偏移量旁边显示一列值

Posted

技术标签:

【中文标题】如何在不使用滞后的情况下在偏移量旁边显示一列值【英文标题】:How to display a column of values next to an offset by one position without using lag 【发布时间】:2020-09-13 21:45:33 【问题描述】:

id | value
-----------
1   | 2
1   | 3
1   | 45

需要

id | value | value2
------------------------
1 | 2 | ---
1 | 3 | 2
1 | 45 | 3
--|---- | 45

您能否展示变体,如何实现?

【问题讨论】:

你为什么不想使用 lag()?使用您正在使用的数据库进行标记。 【参考方案1】:

你确实想要lag():

select id, value,
    lag(value) over(partition by id order by value) value1
from mytable

在不支持窗口函数的数据库中,另一种选择是子查询:

select id, value,
    (select max(value) from mytable t1 where t1.id = t.id and t1.value < t.value) value1
from mytable t

【讨论】:

【参考方案2】:

正确的方法是使用lag()

select id, value, lag(value) over (order by value) as prev_value
from t;

在不支持lag() 的数据库中,您可以使用相关子查询。比如:

select t.*,
       (select t2.value
        from t t2
        where t2.value < t.value
        order by t2.value desc
        fetch first 1 row only
       ) as prev_value
from t;

并非所有数据库都支持标准fetch first,但都应该有类似的东西。

【讨论】:

以上是关于如何在不使用滞后的情况下在偏移量旁边显示一列值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 python 循环的情况下检测和转换列值的单位?

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?

如何在不使用扩展的情况下在 Autodesk forge 查看器上显示图标

如何在不使用对话框的情况下在操作栏上方显示视图?

Django:如何在不重新加载的情况下在页面上显示更新的信息

如何在不使用pivot和unpivot的情况下在SQL Server中水平显示数据?