我有一个包含多个mysql数据库,其中包含这样的数据。 http://sqlfiddle.com/#!9/f084c
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 :(得分: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
通过将上述查询视为表并将其连接回数据表,您可以获得完整的记录:id,fecha和Temperatura,每天都有最大的fecha。
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中工作。
答案 1 :(得分: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
您可以操纵匹配条件以选择要优先排序的行的任何属性。