表: 得分表
+----------+---------+ | 字段名称 | 类型 | +----------+---------+ | 球队名 | varchar | | 球员姓名 | varchar | | 得分时间_min | int | +----------+---------+ 该表的每一行表示 一个球队中一名球员的得分时间,包含球队名、球员姓名和得分时间,得分时间单位为分钟。
编写一个 SQL 查询,对每个球队的得分时间从前到后排序,得出每个球员向下错1行、错2行的数据,字段有:球员姓名、球员错1行、球员错2行。
查询结果如下例所示。
示例 1:
输入: 表:得分表 +-----+------+----------+ | 球队名 | 球员姓名 | 得分时间_min | +-----+------+----------+ | A | A1 | 10 | | A | A5 | 19 | | B | B4 | 27 | | A | A4 | 39 | | B | B1 | 54 | +-----+------+----------+ 输出: +------+-------+-------+ | 球员姓名 | 球员错1行 | 球员错2行 | +------+-------+-------+ | A1 | | | | A5 | A1 | | | A4 | A5 | A1 | | B4 | | | | B1 | B4 | | +------+-------+-------+ 解释: 向下错行问题使用向下偏移窗口函数lag(),语法为:lag(列名,偏移量N,默认值) over(partition by … order by …),默认值是指当向下偏移N行时,如果已经超出了表行和列的范围时,会将这个默认值作为函数的返回值,若没有指定默认值,则返回Null。
