跳到主要内容
翻译页面

本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。

LAG

返回针对分区中前面的某一行对表达式求值的结果。

LAG() 的第一种形式返回针对分区中上一行对表达式求值的结果。如果没有上一行(因为当前行是第一行),则返回 NULL。

如果提供了偏移量参数,它必须是非负整数。返回值是针对分区内当前行之前第 offset 行对表达式求值的结果。如果偏移量为 0,则针对当前行对表达式求值。如果当前行之前不存在第 offset 行,则返回 NULL。

如果还提供了默认值,则当偏移量所指的行不存在时,返回该默认值而不是 NULL。

另请参阅: [SELECT] [LEAD]


语法​

SELECT LAG(expr) OVER ([PARTITION BY column] ORDER BY column) FROM <multipartIdentifier>;

SELECT LAG(expr, offset) OVER ([PARTITION BY column] ORDER BY column) FROM <multipartIdentifier>;

SELECT LAG(expr, offset, default) OVER ([PARTITION BY column] ORDER BY column) FROM <multipartIdentifier>;

参数​

expr 针对前面的行求值的表达式。

offset 可选。一个非负整数,指定向前回溯的行数。默认为 1。

default 可选。偏移量所指的行不存在时返回的值。默认为 NULL。

PARTITION BY column 可选。将结果集划分为多个分区。LAG 函数分别在每个分区内应用。

ORDER BY column 指定处理行的顺序。

返回值​

返回表达式针对指定的前面一行求值所得的值;如果不存在这样的行,则返回 NULL(或默认值)。


示例​

将每个发布版本与上一个发布版本进行比较​

-- Compare each release to previous and next release dates
SELECT
tag_name,
name,
published_at,
LAG(tag_name, 1) OVER (ORDER BY published_at) as previous_release,
LAG(published_at, 1) OVER (ORDER BY published_at) as previous_release_date,
julianday(published_at) - julianday(LAG(published_at, 1) OVER (ORDER BY published_at)) as days_since_last_release
FROM github.repos.releases
WHERE owner = 'stackql'
AND repo = 'stackql'
ORDER BY published_at;

分析 issue 创建之间的间隔​

-- Analyze gaps between issue creation
SELECT
number,
title,
created_at,
LAG(created_at, 1) OVER (ORDER BY created_at) as prev_issue_date,
julianday(created_at) - julianday(LAG(created_at, 1) OVER (ORDER BY created_at)) as days_since_prev_issue
FROM github.issues.issues
WHERE owner = 'stackql'
AND repo = 'stackql'
ORDER BY created_at;

有关更多信息,请参阅 https://sqlite.org/windowfunctions.html#built-in_window_functions。