ウィンドウ関数は 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クエリ結果: ##次に、温度が temp より高く、温度が 0 に等しくないデータを選択します。
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;クエリ結果: 4. テーブルデータの作成 sql
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 サイトの他の関連記事を参照してください。