2013-10-24 6 views
6

मुझे घटनाओं के समूहों के बीच समय अंतर की गणना करने की आवश्यकता है। प्रत्येक "इवेंट ग्रुप" शुरू होता है जब event_count कॉलम = 1, और अधिकतम event_count किसी भी संख्या से अधिक हो सकता है 1.MySQL क्वेरी अधिकतम event_count पर समूह करने के लिए?

मैं इसे MySQL में कैसे कर सकता हूं?

टेबल

CREATE TABLE `monitoring` ( 
    `event_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `hosting_id` char(36) DEFAULT NULL, 
    `event_timestamp` datetime DEFAULT NULL, 
    `event_type` tinyint(3) unsigned DEFAULT NULL, 
    `event_count` int(6) DEFAULT NULL, 
    `session` varchar(36) DEFAULT NULL, 
    PRIMARY KEY (`event_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=1765 DEFAULT CHARSET=utf8; 

टेस्ट रिकॉर्ड:

INSERT INTO `monitoring` (`event_id`, `hosting_id`, `event_timestamp`, `event_type`, `event_count`, `session`) 
VALUES 
    (1753,'97948a60-2e44-d39c-bb02-506c80c97df4','2013-10-23 20:01:19',1,1,NULL), 
    (1711,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:20',1,1,NULL), 
    (1712,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:26',1,2,NULL), 
    (1713,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:30',1,3,NULL), 
    (1714,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:33',1,4,NULL), 
    (1715,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:45',1,5,NULL), 
    (1716,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:48',1,6,NULL), 
    (1717,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:02:51',1,7,NULL), 
    (1718,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:29',1,1,NULL), 
    (1719,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:31',1,2,NULL), 
    (1720,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:33',1,3,NULL), 
    (1721,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:35',1,4,NULL), 
    (1722,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:38',1,5,NULL), 
    (1723,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:40',1,6,NULL), 
    (1724,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:43',1,7,NULL), 
    (1725,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:46',1,8,NULL), 
    (1726,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:48',1,9,NULL), 
    (1727,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 16:49:50',1,10,NULL), 
    (1754,'988df609-4ae4-3062-6361-4fd2665cfb42','2013-10-24 02:48:32',1,1,NULL), 
    (1729,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:02:28',1,1,NULL), 
    (1730,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:03:25',1,2,NULL), 
    (1731,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:03:30',1,3,NULL), 
    (1732,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:05:42',1,4,NULL), 
    (1733,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:06:03',1,5,NULL), 
    (1758,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:43',1,1,NULL), 
    (1757,'d425f99b-0812-5902-37da-4fd266c64545','2013-10-24 08:16:26',1,1,NULL), 
    (1756,'20e00e08-459b-b229-d341-4fd266c23df1','2013-10-24 06:32:10',1,1,NULL), 
    (1738,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:02',1,1,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1739,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:04',1,2,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1740,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:06',1,3,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1741,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:07',1,4,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1742,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:08',1,5,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1743,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:09:09',1,6,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1755,'988df609-4ae4-3062-6361-4fd2665cfb42','2013-10-24 06:30:20',1,1,NULL), 
    (1745,'a9e17a2a-42d9-979f-0484-4fd2665b487a','2013-10-23 17:09:28',1,1,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1746,'a9e17a2a-42d9-979f-0484-4fd2665b487a','2013-10-23 17:09:38',1,2,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1747,'a9e17a2a-42d9-979f-0484-4fd2665b487a','2013-10-23 17:09:55',1,3,'5c31a1eb481bf9e0753f9a25538b0257'), 
    (1748,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:13:54',1,1,NULL), 
    (1749,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:13:56',1,2,NULL), 
    (1750,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:13:58',1,3,NULL), 
    (1751,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-23 17:14:00',1,4,NULL), 
    (1752,'ecd5f06a-7b82-4cc8-deb2-4fd266eeec3e','2013-10-23 19:06:42',1,1,NULL), 
    (1759,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:48',1,2,NULL), 
    (1760,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:51',1,3,NULL), 
    (1761,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:53',1,4,NULL), 
    (1762,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:56',1,5,NULL), 
    (1763,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:23:58',1,6,NULL), 
    (1764,'c47204d5-d682-9ba4-b8b6-4fd26660651a','2013-10-24 12:24:23',1,7,NULL); 

क्या मैं के लिए लक्ष्य कर रहा हूँ:

यहाँ मेज और कुछ परीक्षण डेटा है

On 10-23-2013 down for 31 seconds 
On 10-23-2013 down for 21 seconds 
On 10-23-2013 down for 215 seconds 
    etc... 

जो मैं एक बार करूँगा मैं यह प्रश्न ठीक से समझ सकता हूं।

मेरे क्वेरी अब तक है:

SELECT min(date(`event_timestamp`)) as EventGroupDate, (max(`event_timestamp`) - min(`event_timestamp`)) HowLong 
FROM (
    SELECT `event_timestamp`, @eventGroup := @eventGroup + (`event_count` = 1) eventGroup 
    FROM `monitoring`, (SELECT @eventGroup := 0) init 
    WHERE `hosting_id` = 'c47204d5-d682-9ba4-b8b6-4fd26660651a' 
    ORDER BY `event_timestamp` 
) s 
GROUP BY eventGroup 

लेकिन गलत गणना। सटीक गणना

से नीचे हैं और मैं इसे बनाने के लिए अपडेट पोस्ट करूंगा।

प्रत्येक घटना समूह event_count = 1 के रूप में शुरू होता है, और के बाद से इस event_timestamp कि बीच में सभी एक समूह माना जा सकता है यह माना जा सकता है के आधार पर सॉर्ट करने की जरूरत है किसी भी संख्या से अधिक 1. समाप्त कर सकते हैं। उदाहरण के लिए: रिकॉर्ड आईडी 1711-1717 होगा समूह 1, 1718-1727 समूह 2, इतने पर और बहुत आगे होगा ...

सटीक परिणाम होना चाहिए:

31 
21 
215 
7 
6 
40 
दिए गए आंकड़ों

साथ

+0

'ग्रुप बाय' कथन के साथ, आप केवल एक ही रिकॉर्ड प्राप्त करेंगे यदि आप कुल कार्यों का उपयोग कर रहे हैं, क्योंकि डिफ़ॉल्ट समूह के रूप में लौटाए गए पूरे रिकॉर्डसेट का इलाज करना डिफ़ॉल्ट है। – Orbling

+0

क्या आप अपने इनपुट के आधार पर विस्तारित आउटपुट को विस्तार से जोड़ सकते हैं? बस कुछ पंक्तियां 'एक्स' से वास्तविक संख्या में मिलान करने में मदद करेंगी। –

+0

सुनिश्चित नहीं है कि सटीक संख्या क्यों मायने रखती है (परीक्षण डेटा के रूप में देखकर ...), लेकिन इसे किसी भी तरह जोड़ा गया। – Kevin

उत्तर

2

इस आजमाएं:

SELECT 
    min(date(event_timestamp)) aDay, 
    max(UNIX_TIMESTAMP(event_timestamp)) - min(UNIX_TIMESTAMP(event_timestamp)) secondDiff 
FROM (
    SELECT event_timestamp, @eventGroup := @eventGroup + (event_count = 1) eventGroup 
    FROM monitoring, (SELECT @eventGroup := 0) init 
    WHERE hosting_id = 'c47204d5-d682-9ba4-b8b6-4fd26660651a' 
    ORDER BY event_timestamp 
) s 
GROUP BY eventGroup 

आउटपुट:

|    ADAY | SECONDDIFF | 
|------------------|------------| 
| October, 23 2013 |   31 | 
| October, 23 2013 |   21 | 
| October, 23 2013 |  215 | 
| October, 23 2013 |   7 | 
| October, 23 2013 |   6 | 
| October, 24 2013 |   40 | 

फिल्ड here

+0

मुझे मिल रहा है वे परिणाम भी हैं, और यह सही दिखता है। वास्तविक डेटा के माध्यम से जाने के लिए 1 मिनट दें और इसे जांचें। हाँ, मैंने 'CONCAT_WS' से छुटकारा पा लिया, लेकिन अभी भी दशमलव प्राप्त हो रहा है ... इसके लिए कोई बड़ा सौदा नहीं है;) – Kevin

+0

मैं बाकी कॉलम को आउटपुट में कैसे प्राप्त कर सकता हूं? मुझे 'सत्र' और' event_type' कॉलम भी चाहिए ... – Kevin

+0

नहीं। परिणाम सही नहीं हैं। मैं पोस्ट करूंगा कि उन्हें – Kevin

संबंधित मुद्दे