ウィンドウ関数は MySQL8 以降のみサポートされています
<窗口函数> OVER ([PARTITION BY <用于分组的列>] ORDER BY <用于排序的列>)
lag と lead はそれぞれ前方と後方を意味します
パラメータは 3 つあります。 expression: 列名; offset: オフセット; default_value: 記録ウィンドウを超えるデフォルト値 (デフォルトは null、0 に設定可能)
select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather
##次に、温度が temp より大きく、温度が 0 に等しくないデータを選択します。
select id from (select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather) tmp where temperature>temp and temp != 0;
結果は次のようになります。
##2. LEAD() 関数: 翌日よりも気温が高い日付 ID を数える
まず、日付を並べ替えてから、 use lead () 関数は、温度を 1 日戻し、その日の温度が翌日よりも高い ID を見つけます。select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather
select id from (select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather) tmp where temperature>temp and temp != 0;
DROP TABLE IF EXISTS `weather`; CREATE TABLE `weather` ( `id` int(11) NOT NULL, `date` date NULL DEFAULT NULL, `temperature` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of weather -- ---------------------------- INSERT INTO `weather` VALUES (1, '2022-08-01', 20); INSERT INTO `weather` VALUES (2, '2022-08-02', 25); INSERT INTO `weather` VALUES (3, '2022-08-03', 22); INSERT INTO `weather` VALUES (4, '2022-08-04', 22); INSERT INTO `weather` VALUES (5, '2022-08-05', 26); INSERT INTO `weather` VALUES (6, '2022-08-06', 28); INSERT INTO `weather` VALUES (7, '2022-08-07', 20); SET FOREIGN_KEY_CHECKS = 1;
以上がMySQL で LAG() 関数と LEAD() 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。