Les fonctions de fenêtre ne sont prises en charge que depuis MySQL8
<窗口函数> OVER ([PARTITION BY <用于分组的列>] ORDER BY <用于排序的列>)
lag et lead signifient respectivement en avant et en arrière
Là. sont trois paramètres. expression : nom de la colonne ; offset : offset ; default_value : la valeur par défaut au-delà de la fenêtre d'enregistrement (la valeur par défaut est nulle, peut être définie sur 0)
1. Fonction LAG() : Comptez les identifiants des dates avec des températures plus élevées que la veille
Nous trions d'abord par date, puis trouvons les identifiants avec des températures plus élevées aujourd'hui que la veille en utilisant le décalage ; (), Repoussez la température d'un jour.
select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather
Résultats de la requête :
Sélectionnez ensuite les données où la température est supérieure à la température et la température n'est pas égale à 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;
Les résultats sont les suivants :
2. comparer la température avec l'identifiant de date plus élevé du lendemain
Tout d'abord, nous trions les dates, puis utilisons la fonction lead() pour repousser la température d'un jour et trouver l'identifiant qui a une température plus élevée ce jour-là que le lendemain.
select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather
Résultats de la requête :
Sélectionnez ensuite les données dont la température est supérieure à la température et la température n'est pas égale à 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;
Résultats de la requête :
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;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!