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() 具有默认值的前一行值的主要内容,如果未能解决你的问题,请参考以下文章