Учитывая следующую таблицу
select rv, mv, datetime, rawv from mytable where datetime > '2012-01-30';
+------+------+---------------------+------+
| rv | mv | datetime | rawv |
+------+------+---------------------+------+
| 5 | 81 | 2012-01-31 07:00:00 | 1 |
| 5 | 81 | 2012-01-31 07:01:00 | 2 |
| 5 | 82 | 2012-01-31 07:00:00 | 3 |
| 5 | 82 | 2012-01-31 07:01:00 | 4 |
| 5 | 83 | 2012-01-31 08:00:00 | 5 |
| 5 | 83 | 2012-01-31 08:01:00 | 6 |
+------+------+---------------------+------+
Я ищу SQL-оператор, который предоставляет записи с максимальным значением datetime
для каждой группы rv
, mv
.Результат должен выглядеть следующим образом:
+------+------+---------------------+------+
| rv | mv | max(datetime) | rawv |
+------+------+---------------------+------+
| 5 | 81 | 2012-01-31 07:01:00 | 2 |
| 5 | 82 | 2012-01-31 07:01:00 | 4 |
| 5 | 83 | 2012-01-31 08:01:00 | 6 |
+------+------+---------------------+------+
Знаете ли вы такое утверждение?
То, что я пробовал до сих пор, заключается в следующем, но, как вы можете видеть, я получаю неправильные результаты:
select rv, mv, max(datetime), rawv from mytable
where mv in (81,82,83)
group by rv, mv;
+------+------+---------------------+------+
| rv | mv | max(datetime) | rawv |
+------+------+---------------------+------+
| 5 | 81 | 2012-01-31 07:01:00 | 0 |
| 5 | 82 | 2012-01-31 07:01:00 | 0 |
| 5 | 83 | 2012-01-31 08:01:00 | 5 |
+------+------+---------------------+------+
3 rows in set (0.72 sec)
и
select rv, mv, datetime, rawv from mytable
where mp_nb in (81,82,83)
and datetime=(select max(datetime) from met_value);
+------+------+---------------------+------+
| rv | mv | datetime | rawv |
+------+------+---------------------+------+
| 5 | 83 | 2012-01-31 08:01:00 | 6 |
+------+------+---------------------+------+