Kæmpe fed ansvarsfraskrivelse: Dette kommer med nej garanti, men hvis Jeg har forstået dit problem og Jeg tager ikke fejl et eller andet sted, overvej følgende.
Dit bord er
CREATE TABLE `foo` (`id` INTEGER, `date` DATE, `mileage` INT);
En mulig måde er først at oprette en visning med datoen for sidste måneds seneste læsning (som du kan omdanne til en anden indlejret SELECT
hvis du er så tilbøjelig):
CREATE VIEW `past_month_readings` AS (SELECT `id`, max(`date`) AS `latestreading` FRA `foo` WHERE MONTH(`date`) =MONTH(NOW())-1 GROUP BY `id`);
Efterfulgt af
SELECT `currentmileages`.`id`, `currentmileage`-`previousmileage` FROM (SELECT `foo`.`id`, `mileage` AS `currentmileage` FROM `foo` JOIN (SELECT `id` , MAX(`date`) AS `latestreading` FRA `foo` GROUP BY `id`) AS `baz` PÅ `foo`.`id` =`baz`.`id` OG `foo`.`date` =`baz`.`latestreading` ) AS `currentmileages`JOIN (SELECT `foo`.`id`, `mileage` AS `previousmileage` FROM `foo` JOIN `past_month_readings` PÅ `foo`.`id`=`past_month_readings` .`id` OG `foo`.`date` =`forgangne_måned_aflæsninger`.`latestreading`)SOM `previousmileages`ON`currentmileages`.`id` =`previousmileages`.`id`
For
+------+------------+--------+| id | dato | kilometertal |+------+------------+---------+| 1 | 15-06-2015 | 1234 || 1 | 15-07-2015 | 1444 || 1 | 25-07-2015 | 2000 || 2 | 01-06-2015 | 100 || 2 | 2015-06-20 | 200 || 2 | 2015-07-20 | 300 |+------+------------+--------+
dette resulterer i
+------+-------------------------------------------- +| id | `currentmileage`-`previousmileage` |+------+---------------------------------------- --+| 1 | 766 || 2 | 100 |+------+--------------------------------------------+