sql 导航函数 lead

本文通过具体案例展示了LEAD函数在SQL查询中的应用,包括如何使用该函数获取窗口框架中指定偏移量的后续行值,如何处理NULL值以及如何在不同分区中按时间顺序排列数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

返回后续行的 值。更改 offset 值会改变所返回的后续行;默认值是 1,表示窗口框架中的下一行
WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 3:07:41', 'F30-34'
  UNION ALL SELECT 'Carly Forte', TIMESTAMP '2016-10-18 3:08:58', 'F25-29'
  UNION ALL SELECT 'Lauren Reasoner', TIMESTAMP '2016-10-18 3:10:14', 'F30-34')
SELECT name,
  finish_time,
  division,
  LEAD(name)
    OVER (PARTITION BY division ORDER BY finish_time ASC) AS followed_by
FROM finishers;


namefinish_timedivisionfollowed_by
Carly Forte03:08:58F25-29NULL
Sophia Liu02:51:45F30-34Nikki Leith
Nikki Leith02:59:01F30-34Jen Edwards
Jen Edwards03:06:36F30-34Meghan Lederer
Meghan Lederer03:07:41F30-34Lauren Reasoner
Lauren Reasoner03:10:14F30-34NULL
Lisa Stelzner02:54:11F35-39Lauren Matthews
Lauren Matthews03:01:17F35-39Desiree Berry
Desiree Berry03:05:42F35-39Suzy Slane
Suzy Slane03:06:24F35-39NULL
下一个示例使用可选的 offset 参数。
WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 3:07:41', 'F30-34'
  UNION ALL SELECT 'Carly Forte', TIMESTAMP '2016-10-18 3:08:58', 'F25-29'
  UNION ALL SELECT 'Lauren Reasoner', TIMESTAMP '2016-10-18 3:10:14', 'F30-34')
SELECT name,
  finish_time,
  division,
  LEAD(name, 2)
    OVER (PARTITION BY division ORDER BY finish_time ASC) AS two_runners_back
FROM finishers;


namefinish_timedivisiontwo_runners_back
Carly Forte03:08:58F25-29NULL
Sophia Liu02:51:45F30-34Jen Edwards
Nikki Leith02:59:01F30-34Meghan Lederer
Jen Edwards03:06:36F30-34Lauren Reasoner
Meghan Lederer03:07:41F30-34NULL
Lauren Reasoner03:10:14F30-34NULL
Lisa Stelzner02:54:11F35-39Desiree Berry
Lauren Matthews03:01:17F35-39Suzy Slane
Desiree Berry03:05:42F35-39NULL
Suzy Slane03:06:24F35-39NULL
以下示例使用默认值替换 NULL 值
WITH finishers AS
 (SELECT 'Sophia Liu' as name,
  TIMESTAMP '2016-10-18 2:51:45' as finish_time,
  'F30-34' as division
  UNION ALL SELECT 'Lisa Stelzner', TIMESTAMP '2016-10-18 2:54:11', 'F35-39'
  UNION ALL SELECT 'Nikki Leith', TIMESTAMP '2016-10-18 2:59:01', 'F30-34'
  UNION ALL SELECT 'Lauren Matthews', TIMESTAMP '2016-10-18 3:01:17', 'F35-39'
  UNION ALL SELECT 'Desiree Berry', TIMESTAMP '2016-10-18 3:05:42', 'F35-39'
  UNION ALL SELECT 'Suzy Slane', TIMESTAMP '2016-10-18 3:06:24', 'F35-39'
  UNION ALL SELECT 'Jen Edwards', TIMESTAMP '2016-10-18 3:06:36', 'F30-34'
  UNION ALL SELECT 'Meghan Lederer', TIMESTAMP '2016-10-18 3:07:41', 'F30-34'
  UNION ALL SELECT 'Carly Forte', TIMESTAMP '2016-10-18 3:08:58', 'F25-29'
  UNION ALL SELECT 'Lauren Reasoner', TIMESTAMP '2016-10-18 3:10:14', 'F30-34')
SELECT name,
  finish_time,
  division,
  LEAD(name, 2, 'Nobody')
    OVER (PARTITION BY division ORDER BY finish_time ASC) AS two_runners_back
FROM finishers;


namefinish_timedivisiontwo_runners_back
Carly Forte03:08:58F25-29Nobody
Sophia Liu02:51:45F30-34Jen Edwards
Nikki Leith02:59:01F30-34Meghan Lederer
Jen Edwards03:06:36F30-34Lauren Reasoner
Meghan Lederer03:07:41F30-34Nobody
Lauren Reasoner03:10:14F30-34Nobody
Lisa Stelzner02:54:11F35-39Desiree Berry
Lauren Matthews03:01:17F35-39Suzy Slane
Desiree Berry03:05:42F35-39Nobody
Suzy Slane03:06:24F35-39Nobody
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值