2017-08-24 65 views
0

我有一個mysql包含多個包含這樣的數據的數據庫。 http://sqlfiddle.com/#!9/f084cMysql每隔一段時間只選擇一行

CREATE TABLE `datos` (
    `id` int(11) NOT NULL, 
    `fecha` datetime NOT NULL, 
    `temperatura` tinyint(4) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `datos` (`id`, `fecha`, `temperatura`) VALUES 
(1874, '2017-05-20 01:56:40', 20), 
(1875, '2017-05-20 01:56:51', 20), 
(1876, '2017-06-18 23:32:49', 17), 
(1877, '2017-06-18 23:34:50', 17), 
(1878, '2017-06-18 23:36:51', 17), 
(1879, '2017-06-18 23:38:52', 17), 
(1880, '2017-06-18 23:46:02', 16), 
(1881, '2017-06-18 23:47:12', 17), 
(1882, '2017-06-22 01:06:27', 21); 

我想在30天的時間間隔期間選擇一天中只有一個值,以具有這樣

2017-06-22 01:06:27 21 
2017-06-18 23:47:12 17 
2017-05-20 01:56:51 20 

結果我已經選擇使用

SELECT * FROM `datos` WHERE fecha >= '2017-06-22 01:06:27' - INTERVAL 30 DAY 
整個間隔

但我還沒有設法每天選擇一個值,而不是全部。 將不勝感激幫助

+0

聽起來像你需要了解GROUP BY。這是一種常見的SQL操作,任何有關SQL的參考或教程都會給你解釋和示例。例如,閱讀https://dev.mysql.com/doc/refman/5.7/en/group-by-functions-and-modifiers.html及其子部分。 –

+0

我不明白30天的相關性。也許數據集不是很有代表性 – Strawberry

回答

1

根據您列出的期望結果,它看起來像你想每天的最大費用。

select date(fecha), max(fecha) 
from datos 
group by date(fecha) 

這將導致以下:

2017-06-22 2017-06-22 01:06:27 
2017-06-18 2017-06-18 23:47:12 
2017-05-20 2017-05-20 01:56:51 

通過治療上述查詢作爲表和連接它回到DATOS表就可以得到完整的記錄:身份證,出生日期,以及溫度這每天都有最大的費用。

select d1.* 
from datos d1, 
(select date(fecha), max(fecha) as max_fecha 
from datos 
group by date(fecha)) d2 
where d1.fecha = d2.max_fecha 
and d1.fecha >= '2017-06-22 01:06:27' - INTERVAL 30 DAY 

在下列所得:

1875 2017-05-20 2017-05-20 01:56:51 20 
1881 2017-06-18 2017-06-18 23:47:12 17 
1882 2017-06-22 2017-06-22 01:06:27 21 

注意我初步解決了在Oracle中,因爲我沒有訪問mysql數據庫,但我相信我正確地改變了MySQL的查詢。

0
select a.* 
from datos a 
    left outer join datos b 
    on substr(a.fecha,1,10) = substr(b.fecha,1,10) and a.id < b.id 
where b.id is null 

你可以操縱你的匹配來選擇要優先考慮行的任何財產的條件。

相關問題