Mysql 通过使用subdate获取前一天,在自定义列中计算

Mysql 通过使用subdate获取前一天,在自定义列中计算,mysql,sql,date,join,window-functions,Mysql,Sql,Date,Join,Window Functions,我试图在mysql中使用subdate方法,但我无法得到我想要的 假设我有下表: 表: id created_at value 1 2019-03-19 50 2 2016-03-20 100 3 2016-03-21 87 我想创建一个视图,其中将显示3列,并添加一个自定义,这基本上是当前值与前一天值之间的差异 在本例中,我的视图输出应为: id created_at value diff 1 2019-03-1

我试图在mysql中使用subdate方法,但我无法得到我想要的

假设我有下表:

表:

id    created_at    value
1     2019-03-19    50
2     2016-03-20    100
3     2016-03-21    87
我想创建一个视图,其中将显示3列,并添加一个自定义,这基本上是当前值与前一天值之间的差异

在本例中,我的视图输出应为:

id    created_at    value    diff
1     2019-03-19    50       0
2     2016-03-20    100      50
3     2016-03-21    87       -13
感谢您的帮助

在MySQL 8.0中,您可以使用lag:

在早期版本中,您可以自联接表,并对相关子查询使用not exists条件来获取以前的记录:

select
    t.*,
    coalesce(t.value - t1.value, 0) diff
from mytable t
left join mytable t1 
    on t1.created_at < t.created_at
    and not exists(
        select 1
        from mytable t2
        where t2.created_at < t.created_at and t2.created_at > t1.created_at
    )
在MySQL 8.0中,您可以使用lag:

在早期版本中,您可以自联接表,并对相关子查询使用not exists条件来获取以前的记录:

select
    t.*,
    coalesce(t.value - t1.value, 0) diff
from mytable t
left join mytable t1 
    on t1.created_at < t.created_at
    and not exists(
        select 1
        from mytable t2
        where t2.created_at < t.created_at and t2.created_at > t1.created_at
    )

哪个MySQL版本作为MySQL 8使LEAD/LAG更容易,否则你必须用MySQL用户变量或相关子查询来模拟它。我使用MySQL workbench 8.0哪个MySQL版本作为MySQL 8使LEAD/LAG更容易,否则你必须用MySQL用户变量或相关子查询来模拟它。我使用MySQL workbench 8.0workbench 8.0谢谢!使用你答案的第二部分,这对我很有用。你在这个答案上打了一个小错误:coalsece。如果可以,请编辑it@WilliamW:欢迎!谢谢你发现了打字错误,我相应地编辑了我的答案。谢谢!使用你答案的第二部分,这对我很有用。你在这个答案上打了一个小错误:coalsece。如果可以,请编辑it@WilliamW:欢迎!谢谢你发现了打字错误,我相应地编辑了我的答案。