sql >> Database teknologi >  >> RDS >> Mysql

Beregn kilometertal for køretøjer ved at trække fra køretøjsaflæsninger

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 |+------+--------------------------------------------+

  1. MySql stopper automatisk

  2. #1005 - Kan ikke oprette tabellen 'table_name' (fejlnr:150)

  3. Top tre tendenser, der påvirker DBA'er Ansvarlig for SQL Server-overvågning

  4. Bruger du Mysql på kommandolinjen i osx - kommandoen blev ikke fundet?