`
Renzy_200
  • 浏览: 2173 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用lead 、lag 查询上一条记录、下一条记录

阅读更多
表的结构如下:
STAFF_NO   STAFF_NAME    SEX
---------  -----------   ----
001         张三            男
002         李四            男
003         王五            男

如要查询Staffno是002的前一条记录
select * from staff where staff_no=(select c.p from (select staff_no,lag(staff_no,1,0)  over (order by staff_no) as p from staff) c where c.staff_no='002')

结果:
STAFF_NO   STAFF_NAME    SEX
---------  -----------   ----
001         张三            男
                                                                                    
如要查询其后一条记录
select * from staff where staff_no=(select c.n from (select staff_no,lead(staff_no,1,0)  over (order by staff_no) as n from staff) c where c.staff_no='002')

结果:
STAFF_NO   STAFF_NAME    SEX
---------  -----------   ----
003         王五            男


查询第一条

select * from (select s.*,row_number()over(order by staff_no ) rn from staff s) where rn=1 ;

查询最后一条

select * from (select s.*,row_number()over(order by staff_no desc ) rn from staff s) where rn=1 ;

分享到:
评论

相关推荐

    SQLServer2005高级查询

    4. 全外连接(FULL OUTER JOIN):返回左右两表的所有记录,如果某条记录在另一表中没有匹配,则用NULL填充。 二、子查询 1. 标量子查询:嵌套在其他查询中,作为单个值使用的查询。 2. 行子查询:用于比较行的查询...

    oracle常用查询

    11. **分析函数**:如RANK()、DENSE_RANK()、ROW_NUMBER()用于排序并分配行号,LEAD()和LAG()获取当前行的前一行或后一行的值。 12. **窗口函数**:如OVER()子句配合SUM()、AVG()等函数在数据窗口内进行计算,提供...

    高频HIVE-SQL笔试题详解(一).docx

    这个问题的解决思路是,首先使用lag函数判断每条记录与其相邻的记录之间是否连续,然后使用窗口函数lead获取每一条记录的往后第2条记录的日期,并与本条记录日期求差值。如果这个差值等于2,就表明该用户连续出勤了3...

    悼念的经典sql查询语句

    6. **窗口函数**:窗口函数如RANK(), ROW_NUMBER(), DENSE_RANK() 和 LAG(), LEAD()等,可以在一组行上执行计算,而不是整个结果集。例如,`RANK() OVER (PARTITION BY column1 ORDER BY column2 DESC)` 会根据...

    oralce笔试题oralce笔试题

    `LAG()`和`LEAD()`函数分别用于获取当前行之前和之后的值,通过与当前月份比较,可以获取上个月和下个月的总收入。 5. 最后一个问题要求基于日期字段`C1`找出连续日期的记录。这可能需要使用自连接或者分析函数来...

    尚硅谷大数据技术之Hive-04(面试题)1

    使用`lead()`函数获取下一条记录的日期,并计算与当前日期的差值,累加连续登录天数,直到出现大于1天的间隔。 4. 打折日期交叉问题: 这个问题涉及到日期区间重叠的计算。可以使用自连接来找出品牌的打折期间是否...

    oracle函数介绍(6) 著名函数之分析函数.doc

    此函数返回根据analytic_clause定义的范围内的第一条记录的列值。 6. LAST_VALUE (col) OVER ( analytic_clause ) 相反地,LAST_VALUE函数返回范围内最后一条记录的列值。 7. LAG(col[,n][,n]) over([partition_...

    SQL学习笔记二

    例如,`INSERT INTO Employees (ID, Name, Age) VALUES (1, 'John Doe', 30)`,这会在Employees表中添加一条新记录。 3. 数据查询:SELECT语句是SQL中最常用的,用于从数据库中检索信息。可以通过WHERE子句进行条件...

    SQL语句中如何做到间隔行相减

    具体来说,对于每一条记录,我们查找`#t`表中`t3`值小于当前行`t3`值的第一条记录,并从中提取`t2`列的值,然后用当前行的`t2`值减去这个值,得到结果列`result`。 ```sql SELECT b1.*, b1.t2 - (SELECT TOP 1 t2...

    存储过程-根据类型合并相邻的票据

    它可能通过使用自连接或者窗口函数(如LAG或LEAD)来检查当前记录与其前一条或后一条记录的关系。如果发现相邻的票据类型相同,它们就会被合并成一个新的记录,可能涉及更新或插入新的字段值。此外,可能还需要考虑...

    MySQL 查询语句大全(基础命令、高级命令)

    6. **窗口函数**:如ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD()等,可以在结果集上进行计算并考虑行的相对位置。例如,`SELECT column1, ROW_NUMBER() OVER (ORDER BY column2) FROM table_name;` 7. **...

    Hive SQL大厂必考常用窗口函数及面试题.pdf

    1. **定义**:窗口函数在每条记录上执行,而不是像聚合函数那样将多条记录聚合为一条。它可以同时实现GROUP BY子句的分组和ORDER BY子句的排序功能,但PARTITION BY并不具备GROUP BY的汇总功能。 2. **分类**:主要...

    sql 连续天数查询

    在SQL中,我们可以使用自连接或者窗口函数(如LEAD和LAG)来解决这个问题。这里,我们先来看看自连接的方法。假设我们有一个名为`user_logins`的表,其中包含`user_id`(用户ID)和`login_date`(登录日期)两个字段...

    计算机sql语言的基础用法和常见用法

    这条命令将一条包含`id`、`name`和`email`字段的新记录添加到了`users`表格中。 ##### 2.3 查询数据(`SELECT`) 使用`SELECT`语句可以从数据库中检索数据。例如,检索`users`表格中的所有数据: ```sql SELECT *...

    sql优化part2

    - 使用`LEAD()`和`LAG()`函数获取相邻行的数据。 综上所述,通过合理调整SQL查询的结构、优化查询逻辑以及充分利用Oracle提供的内置功能,可以显著提升SQL查询的性能。在实际应用中,开发者需要根据具体情况灵活...

    Oracle数据库速查知识文档,oracle使用手册

    Oracle的高级查询涉及到联接(JOIN)、子查询、集合操作(UNION、INTERSECT、EXCEPT)以及窗口函数(如`RANK`、`ROW_NUMBER`、`LEAD`、`LAG`)。这些技术允许对大数据集进行复杂分析,提取有价值的信息。 PL/SQL...

    数据库面试题索引sql优化

    这里使用了`LEAD`和`LAG`函数来获取当前行的前一行或后一行的特定列的值。这对于分析连续数据非常有用。 **题目8.7:** 根据子串分组。 **解答:** ```sql SELECT TO_CHAR(HIREDATE, 'YYYY'), AVG(SAL) FROM EMP ...

    sql复习练习

    ` 插入一条新的学生记录,`UPDATE Students SET Name = 'Jane' WHERE ID = 1;` 将ID为1的学生姓名改为Jane。 3. 数据查询:SELECT语句是SQL的灵魂,用于从表中检索数据。可以使用SELECT * FROM Students; 获取表中...

    SQL语句大全

    如果需要一次性插入多条记录,可以使用INSERT INTO ... VALUES ... 的多值形式。 4. **数据更新**:UPDATE语句用于修改已存在的记录。配合WHERE子句,可以精确地定位到要更新的记录。 5. **数据删除**:DELETE ...

Global site tag (gtag.js) - Google Analytics