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 में देख सकते हैं। अंतिम क्वेरी का खंड)। इसलिए टाइप बी के आखिरी गैप को नजरअंदाज कर दिया गया।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कंस्ट्रक्टर इन द सेलेक्ट क्लॉज का उपयोग करके एकाधिक तालिका के चयनित कॉलम के लिए एचक्यूएल जॉइन क्वेरी कैसे लिखें

  2. MySQL कनेक्टर एनम को वास्तविक एक से कम मान के साथ जोड़ रहा है

  3. पायथन में mysql कनेक्टर का उपयोग करके डेटा डालना

  4. एक पंक्ति की आईडी कैसे प्राप्त करें मैंने अभी php/mysql डाला है

  5. एक MySQL तालिका कॉलम को कैसे प्रतिस्थापित करें