1. 程式人生 > 其它 >SQL每日一題(20220303)及知識點總結

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 操作符