Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn SQL để có được sự khác biệt giữa các bản ghi liền kề

Tôi nghĩ rằng không có cách nào thoát khỏi việc định dạng lại dữ liệu một chút và để làm điều đó, bạn có thể sử dụng bảng tạm thời.

Lưu ý :Tôi đã tạo một bảng với các số nguyên thay vì thời gian là dữ liệu nguồn để tránh tất cả các phép tính định dạng thời gian, nhưng nó thực sự giống nhau.

Dữ liệu nguồn tôi đã tạo là:

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');

Sau đó, tập lệnh bạn cần sử dụng để nhận được câu trả lời của mình là:

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;

Và kết quả là:

type   avg_gap
 A     2.5
 B     1.5

CHỈNH SỬA: Theo quy tắc mới của bạn trong bản chỉnh sửa:Quy tắc của tôi là không tính khoảng trống lớn hơn 5 (như bạn có thể thấy trong WHERE mệnh đề của truy vấn cuối cùng). Do đó, khoảng trống cuối cùng của loại B đã bị bỏ qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, việc sao chép tệp bảng dẫn đến LỖI 1017 (HY000):Không thể tìm thấy tệp:mặc dù nó ở đó

  2. Cách sử dụng mysql trực tuyến với ứng dụng dành cho máy tính để bàn

  3. Người dùng không thể truy cập cơ sở dữ liệu

  4. SUM một cặp COUNT từ hai bảng dựa trên một biến thời gian

  5. Tại sao không kết nối trực tiếp android với cơ sở dữ liệu?