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

SQL Query untuk mendapatkan perbedaan antara catatan yang berdekatan

Saya rasa tidak ada salahnya untuk memformat ulang data, dan untuk itu Anda dapat menggunakan tabel sementara.

Catatan :Saya membuat tabel dengan bilangan bulat alih-alih waktu sebagai data sumber untuk menghindari semua perhitungan format waktu, tetapi sebenarnya sama.

Sumber data yang saya buat adalah:

CREATE TABLE `table` (
`start` INT(11) NOT NULL,
`end` INT(11) NOT NULL,
`type` VARCHAR(6));

INSERT INTO `table` VALUES
(1,3,'A'),
(5,7,'A'),
(6,10,'A'),
(2,6,'B'),
(3,4,'B'),
(5,11,'B'),
(12,13,'B');

Maka skrip yang perlu Anda gunakan untuk mendapatkan jawaban Anda adalah:

DROP TABLE IF EXISTS temp;
CREATE TABLE temp (
id int(100) AUTO_INCREMENT,
start int(11) NOT NULL,
type VARCHAR(6),
PRIMARY KEY id (id));

INSERT INTO temp(start, type) 
SELECT start, type FROM table
ORDER BY type, start;

SELECT t1.type, AVG(t1.start - t2.start) AS avg_gap 
FROM temp t1
JOIN temp t2 ON t1.type = t2.type AND t1.id = (t2.id + 1)
WHERE t1.start - t2.start < 5
GROUP BY t1.type;

Dan hasilnya adalah:

type   avg_gap
 A     2.5
 B     1.5

EDIT: Menurut aturan baru Anda di edit:Aturan saya tidak menghitung kesenjangan yang lebih besar dari 5 (seperti yang Anda lihat di WHERE klausa permintaan akhir). Oleh karena itu celah terakhir dari tipe B diabaikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat membuat Google Chart menggunakan data tabel MySQL sebagai sumber data

  2. MYSQL, menggunakan nama tabel unik VS menggunakan id

  3. Sql Self bergabung dengan kueri? Bagaimana cara mendapatkan kategori sub kategori?

  4. Bagaimana saya bisa mendekripsi kata sandi MySQL?

  5. Penyimpanan Biner MySQL menggunakan Sistem File BLOB VS OS:file besar, jumlah besar, masalah besar