Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL заявка за получаване на разлика между съседни записи

Мисля, че няма избягване на малко преформатиране на данните и за това можете да използвате временна таблица.

Забележка :Създадох таблица с цели числа вместо времена като изходни данни, за да избегна всички изчисления във формат на времето, но наистина е същото.

Изходните данни, които създадох, са:

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

Тогава скриптът, който трябва да използвате, за да получите отговора си, е:

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;

И резултатът е:

type   avg_gap
 A     2.5
 B     1.5

РЕДАКТИРАНЕ: Според новото ви правило в редакцията:Моето правило е да не изчислявам пропуски, по-големи от 5 (както можете да видите в WHERE клауза на окончателното запитване). Следователно последната празнина от тип B беше игнорирана.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите клеймо за време в Java и да го съхраните в MySQL база данни?

  2. Вмъкване на елемент в слушател на доктрина

  3. MySQL ON UPDATE CURRENT_TIMESTAMP не се актуализира

  4. Laravel db миграция - грешка при преименуване на колона - Неизвестен тип база данни е поискано изброяване

  5. Ръководство за проектиране на база данни за система за управление на служители в MySQL