模块 13 · 第 4 课(共 4)课程中的52/57~12 min
模块课程(4/4)
班次:滞后和领先
班次:滞后和领先
在顺序数据和基于时间的数据中,您经常需要将当前行与前一天的行进行比较。在“标准”SQL 中,这样做需要非常危险(并且非常慢)的自连接。
LAG()(上一行)和 LEAD()(下一行)函数以极其敏捷和优雅的方式解决了这个问题。
展望过去与未来
SQL
SELECT
created_at,
total_amount,
LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;在该示例中,每一行将方便地携带同一表产生的金额,向前移动一行(在时间上向后移动)。我们可以轻松减去 total_amount - LAG(...) 来计算差异或逐月百分比变化!
同样, LEAD() 将从当前行正下方的行中提取值。
锻炼#sql.m13.l4.e1
尝试:0加载中...
从“products”表中,提取“id”、“launched_on”、“price”并添加“prev_price”,即产品的“price”在逻辑上被视为“前一个”价格,按“launched_on”升序排列。
正在加载编辑器...
显示提示
使用 LAG(price) OVER(ORDER BYlaunched_on ASC)
3 次尝试后可用的解决方案
锻炼#sql.m13.l4.e2
尝试:0加载中...
您如何计算每个用户的评分跳跃?模拟一下:从“reviews”表中提取“customer_id”、“created_at”、“ rating”和“next_ rating”(同一客户随时间的下一次评论)。因此,按“customer_id”进行分区,按“created_at”进行排序,并使用正确的窗口函数来查看。
正在加载编辑器...
显示提示
LEAD() 与 OVER 中的 PARTITION BY 和 ORDER BY 一起使用。
3 次尝试后可用的解决方案