2010-11-27 18 views
5

मैं एक मेज की तरह इस15 मिनट

CREATE TABLE `time_table` (
`id` INT(10) NOT NULL AUTO_INCREMENT, 
`creationDate` DATETIME NOT NULL, 
PRIMARY KEY (`id`) 
) 

मैं मूल रूप से तालिका में कुछ रिकॉर्ड के निर्माण के समय की दुकान लग रहा है कि राशि से Mysql दिनांक समय समूह। मैं जानता हूँ कि अगर मैं रिकॉर्ड 15 मिनट के अंतराल में बनाया गया है कि मैं इस

SELECT FLOOR(UNIX_TIMESTAMP(creationDate)/900) AS t, 
COUNT(*) FROM time_table 
GROUP BY t 

कि मुझे इस

t   COUNT(*) 
1434187 1 
1434188 3 
1434189 2 
1434190 2 

मैं कैसे करूँ तरह कुछ देता है की तरह कुछ का उपयोग करेगा की गिनती प्राप्त करना चाहते हैं मतलब पहले कॉलम का? मैं यह मेरे जैसे

t     COUNT(*) 
2:00pm - 2:15pm 1 
2:15pm - 2:30pm 3 
2:30pm - 2:45pm 2 
2:45pm - 3:00pm 2 

मैं समझता हूँ कि कुछ हेरफेर के साथ मैं मिल सकता है कुछ दिखाना चाहते हैं तो 1,434,187 2:15 बजे दिखाने के लिए। यहां तक ​​कि यह एक अच्छी शुरुआत हो सकती है .... फिर कुछ तर्क के साथ मैं पूरी अवधि दिखा सकता हूं। धन्यवाद!

उत्तर

7

एक तरह से बस के लिए एक सीमा के भीतर सब कुछ प्राप्त करने के लिए > और < उपयोग करने के लिए है, लेकिन आप यह होना करने के लिए सरल हो सकते हैं: http://forums.mysql.com/read.php?10,202789,202807

+1

आसान और स्पष्ट समाधान के लिए +1, लेकिन कुछ यहाँ गलत हो जाता है, गिनती (चुनिंदा में ...) सही नहीं है ... और यह 24 घंटे के लिए ही काम करता है ... – Dani

+0

@Dani - आपका 'कहां' खंड कैसा दिखता है? –

7

यहाँ समाधान है

SELECT ... 

GROUP BY (4 * HOUR(thistime) + FLOOR(MINUTE(thistime)/15)) 

से मैं उपयोग करें:

SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(creationDate)/900) * 900) AS t, COUNT(*) FROM time_table GROUP BY t 

हालांकि यह 4 साल बाद आता है, उम्मीद है कि यह किसी के लिए उपयोगी होगा।

5

उत्तर 2 केवल 24 घंटे के लिए काम करता है - इसे आजमाएं;

SELECT ... 

GROUP BY year(date),month(date),day(date),(4 * HOUR(date) + FLOOR(MINUTE(date)/15)) 
संबंधित मुद्दे