Mysql在间隔中每天只选择一行

时间:2017-08-24 23:43:56

标签: mysql sql

我有一个包含多个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

但我没有设法每天只选择一个值而不是全部。 非常感谢帮助

2 个答案:

答案 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

您可以操纵匹配条件以选择要优先排序的行的任何属性。

相关问题