SQL每日一题(20220303)及知识点总结

Posted lishidefengchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL每日一题(20220303)及知识点总结相关的知识,希望对你有一定的参考价值。

题目来自:公众号【SQL数据库开发】

有这样一张表F0303,这只是其中一个单号的(我感觉语句不通顺,去掉这句话)

 

 

 希望按单号+工序排序,相邻行部门相同的情况,取工序号最大的那一行记录,得到的结果如下:

 

 

 测试数据

CREATE TABLE F0303 (
单号 VARCHAR(20) NOT NULL,
工序 VARCHAR(10) NOT NULL,
部门编号 INT NOT NULL,
完成数量 INT NOT NULL
)
INSERT INTO F0303 VALUES(\'2021090065\',\'0010\',222,1500);
INSERT INTO F0303 VALUES(\'2021090065\',\'0020\',223,1497);
INSERT INTO F0303 VALUES(\'2021090065\',\'0030\',223,1497);
INSERT INTO F0303 VALUES(\'2021090065\',\'0040\',213,1497);
INSERT INTO F0303 VALUES(\'2021090065\',\'0050\',224,1497);
INSERT INTO F0303 VALUES(\'2021090065\',\'0060\',224,1497);
INSERT INTO F0303 VALUES(\'2021090065\',\'0070\',220,1496);
INSERT INTO F0303 VALUES(\'2021090065\',\'0080\',220,1496);
INSERT INTO F0303 VALUES(\'2021090065\',\'0090\',224,0);

答案

WITH tmpList 
AS
(
SELECT *, 
LEAD(部门编号,1,NULL) OVER (PARTITION BY 单号 ORDER BY 工序) AS nextDp 
FROM F0303
)

SELECT 单号,工序,部门编号,完成数量 
FROM tmpList 
WHERE 部门编号 <> nextDp OR nextDp IS NULL;

知识点

  1. WITH AS
  2. LEAD OVER
  3. 无法使用比较运算符来测试 NULL 值,比如 !=, =,<,>或者 <>。我们必须使用 IS NULL 和 IS NOT NULL 操作符

以上是关于SQL每日一题(20220303)及知识点总结的主要内容,如果未能解决你的问题,请参考以下文章

每日一题 错选择 及 编程题 周总结

每日一题 错选择 及 编程题 周总结

爱创课堂每日一题第十一天常见web安全及防护原理

老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

[每日一题] 简述 AJAX 的原理

python每日一题:锁知识点