2013-05-10 100 views
7

我想從'2013-04-01 00:00:00''today'之間選擇記錄,但每天都有很多值,因爲它們每15分鐘保存一個值,所以我只需要每天的第一個或最後一個值。SQL:如何每天選擇一條記錄(假設每天包含多個值)MySQL

表模式:

CREATE TABLE IF NOT EXISTS `value_magnitudes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `value` float DEFAULT NULL, 
    `magnitude_id` int(11) DEFAULT NULL, 
    `sdi_belongs_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `reading_date` datetime DEFAULT NULL, 
    `created_at` datetime DEFAULT NULL, 
    `updated_at` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1118402 ; 

壞SQL:

SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-01 00:00:00' AND '2013-04-02 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 
SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-02 00:00:00' AND '2013-04-03 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 
SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-03 00:00:00' AND '2013-04-04 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 
SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-04 00:00:00' AND '2013-04-05 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 
SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-05 00:00:00' AND '2013-04-06 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 
etc ... 

我希望所有在一個可能的話......

謝謝你很多。

編輯: 我的意思是,我每天的查詢,但我只是想從reading_date >= '2013-04-01 00:00:00'使單個查詢ç

EDIT2: 我在table.value_magnitudes 記錄和它需要sooooooooo很長的時間才能執行和響應該查詢,有時會超時連接。

回答

4

要獲得每個日期的第一個條目,你可以做

select * from value_magnitudes 
where id in 
(
    SELECT min(id) 
    FROM value_magnitudes 
    WHERE magnitude_id = 234 
    and date(reading_date) >= '2013-04-01' 
    group by date(reading_date) 
) 
+0

但如果我這樣做,我會做一個查詢的每一天,直到我達到今天,是否有可能在一個查詢?謝謝。 – rokimoki 2013-05-10 10:33:17

+0

是的,將日期保留在where條件中。我更新了我的答案。 – 2013-05-10 10:34:17

+0

Aham,但我想從X日期開始,到今天,所以它會像'reading_date> ='2013-04-01 00:00:00'' – rokimoki 2013-05-10 10:39:23

2
select * from value_magnitudes 
where id in 
(
    SELECT min(id) 
    FROM value_magnitudes 
    WHERE `value_magnitudes`.`reading_date` BETWEEN '$from_selected' AND '$to_selected' and (magnitude_id = 234) group by date(reading_date) 
) 
相關問題