【问题标题】:MySQL lag() with default value previous row valueMySQL lag() 具有默认值的前一行值
【发布时间】: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 结果设置第一个值,然后照常进行?

【问题讨论】:

  • 样本数据和期望的结果将阐明您想要做什么。每个月都有多行,所以不清楚。

标签: mysql sql select mariadb


【解决方案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 第一个返回的行
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2015-02-05
    相关资源
    最近更新 更多