Given following Table
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 |
+------+------+---------------------+------+
I’m looking for a SQL-statement which provides the records with the maximal datetime value for each rv, mv group. The result should look like:
+------+------+---------------------+------+
| 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 |
+------+------+---------------------+------+
Do you know such a statement?
What I’ve tried so far is following, but as you can see I’m getting wrong results:
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)
and
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 |
+------+------+---------------------+------+
Try this query –