Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hitung Jarak tempuh Kendaraan dengan Mengurangi dari Bacaan Kendaraan

Penafian besar-besaran: Ini datang dengan tidak garansi, tapi jika Saya telah memahami masalah Anda dan Saya tidak salah di suatu tempat, pertimbangkan yang berikut ini.

Meja Anda menjadi

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

Salah satu cara yang mungkin adalah pertama-tama membuat tampilan dengan tanggal pembacaan terakhir bulan lalu (yang dapat Anda ubah menjadi SELECT bersarang lainnya jika Anda sangat ingin):

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

Diikuti oleh

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`

Untuk

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

ini menghasilkan

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jenis Waktu Mysql memberikan ArgumentError:argumen di luar jangkauan di Rails jika lebih dari 24 jam

  2. ekstensi mysqli tidak ada debian

  3. Daftar SELECT tidak ada dalam klausa GROUP BY dan berisi kolom nonagregated .... tidak kompatibel dengan sql_mode=only_full_group_by

  4. MySQL:Kembalikan hanya pesan terakhir di tabel pesan datar/percakapan

  5. Urutan kondisi bergabung penting?