sql >> Databasteknik >  >> RDS >> Mysql

Beräkna körsträcka för fordon genom att subtrahera från fordonsavläsningar

Enorm fet ansvarsfriskrivning: Detta kommer med nej garanti, men om Jag har förstått ditt problem och Jag har inte fel någonstans, tänk på följande.

Ditt bord är

CREATE TABLE `foo` (`id` INTEGER, `date` DATE, `mileage` INT);

Ett möjligt sätt är att först skapa en vy med datumet för förra månadens senaste läsning (som du kan göra om till en annan kapslad SELECT om du är så benägen):

CREATE VIEW `past_month_readings` 
AS (SELECT `id`, 
    max(`date`) AS `latestreading`
    FROM `foo` 
    WHERE MONTH(`date`) = MONTH(NOW())-1 
    GROUP BY `id`);

Följt av

SELECT `currentmileages`.`id`, `currentmileage`-`previousmileage` FROM 
 (SELECT `foo`.`id`, `mileage` AS `currentmileage` 
  FROM `foo` 
  JOIN (SELECT `id`, MAX(`date`) AS `latestreading` FROM `foo` GROUP BY `id`) 
  AS `baz` 
  ON `foo`.`id` = `baz`.`id`
  AND `foo`.`date` = `baz`.`latestreading`
 ) 
AS `currentmileages`
JOIN
 (SELECT `foo`.`id`, `mileage` AS `previousmileage` 
  FROM `foo` 
  JOIN `past_month_readings` 
  ON `foo`.`id`=`past_month_readings`.`id` 
  AND `foo`.`date` = `past_month_readings`.`latestreading`)
AS `previousmileages`
ON
`currentmileages`.`id` = `previousmileages`.`id`

För

+------+------------+---------+
| id   | date       | mileage |
+------+------------+---------+
|    1 | 2015-06-15 |    1234 |
|    1 | 2015-07-15 |    1444 |
|    1 | 2015-07-25 |    2000 |
|    2 | 2015-06-01 |     100 |
|    2 | 2015-06-20 |     200 |
|    2 | 2015-07-20 |     300 |
+------+------------+---------+

detta resulterar i

+------+------------------------------------+
| id   | `currentmileage`-`previousmileage` |
+------+------------------------------------+
|    1 |                                766 |
|    2 |                                100 |
+------+------------------------------------+


  1. Insättningshastigheten minskar när tabellen växer i mysql

  2. välj distinct count(id) kontra select count(distinct id)

  3. Ställ in alternativ 9 i SQL Server lagrad procedur med WinHttp.WinHttpRequest.5.1 för TLS 1.2

  4. MySQL-mål i Luigi arbetsflöde