MySQL lag() 具有默认值的前一行值

Posted

技术标签:

【中文标题】MySQL lag() 具有默认值的前一行值【英文标题】:MySQL lag() with default value previous row value 【发布时间】:2021-06-08 08:58:25 【问题描述】:

这是我的 sqlfiddle - http://sqlfiddle.com/#!9/fa7b9a/2。

我如何才能获得以前的 LAG() 和当前的 3 月结果?

SELECT p6 as Current,lag(p6) over (ORDER BY dt) AS previous_val FROM dobridol
WHERE  dt BETWEEN '2021-03-01' AND '2021-03-30'

另外,我如何为 previous_val 上次 FEB 结果设置第一个值,然后照常进行?

【问题讨论】:

样本数据和期望的结果将阐明您想要做什么。每个月都有多行,所以不清楚。 【参考方案1】:

一种可能的解决方案 - 计算整个表的 LAG,然后过滤结果:

SELECT 
    p6,
    id,
    prev_val 
FROM (
  SELECT
    dt,
    p6,
    id,
    lag(p6) over (ORDER BY dt) AS prev_val 
  FROM dobridol
) tbl
WHERE dt BETWEEN '2021-03-01' AND '2021-03-30';

SQL fiddle

【讨论】:

【参考方案2】:

您的问题不是 100% 清楚。您想要上个月的哪个值?

如果你想要最大值,你可以使用max()和一个窗框规范:

select d.*,
      max(p6) over (order by year(dt) * 12 + month(dt)
                    range between 1 preceding and 1 preceding
                   )
from dobridol d;

Here 是一个 dbfiddle。

【讨论】:

上个月最后一行的值。 SELECT p6 as Current,lag(p6) over (ORDER BY dt) AS previous_val FROM dobridol WHERE dt BETWEEN '2021-03-01' AND '2021-03-30' - 这个查询没问题在你的小提琴中运行,但我想要最后一个 FEB 结果而不是 NULL 第一个返回的行

以上是关于MySQL lag() 具有默认值的前一行值的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 MySQL 中使用具有多个值的 DEFAULT 约束吗?我可以在下面的示例中添加更多默认值吗? [关闭]

Hive分析函数LAG和LEAD详解

Laravel 迁移:添加具有现有列默认值的列

将 NULL 插入具有默认值的 NOT NULL 列

当前行和上一行之间具有特定值的窗口函数

具有默认值的打字稿固定数组