例如表结构如下:
key time value
1 100 5
1 101 7
1 102 9
2 100 6
2 101 10
key为关键字
现在要查询时间值最大的各个关键字所对应的记录例如上面对于关键字1,时间值最大为102,对于关键字2,时间值最大为101,那么查询结果应为:
1 102 9
2 101 10请问查询语句该怎么写?
key time value
1 100 5
1 101 7
1 102 9
2 100 6
2 101 10
key为关键字
现在要查询时间值最大的各个关键字所对应的记录例如上面对于关键字1,时间值最大为102,对于关键字2,时间值最大为101,那么查询结果应为:
1 102 9
2 101 10请问查询语句该怎么写?
create table b1 (`key` int not null,`time` int not null,`value` int not null) engine=myisam default charset=utf8;
insert into b1 values
(1, 100, 5),
(1, 101, 7),
(1, 102, 9),
(2, 100, 6),
(2, 101, 10);select * from (select * from b1 order by `time` desc ) T group by `key`;drop table b1;
=========
query result(2 records)
key time value
1 102 9
2 101 10
SELECT t1 . *
FROM b1 t1, (
SELECT `key` , max( `time` ) AS maxtime
FROM b1
GROUP BY `key`
)t2
WHERE t1.`key` = t2.`key`
AND t1.time = t2.maxtime
select * from b1 order by `time` desc返回的结果集T和原来的表B1不是一样的吗?只是顺序不同,为什么可以达到预期的效果?
所以我排序是为了让时间最大的排在前面。
这样有每组的最大的就出来了。
group by的时候不是会把key相同的都放在一个组吗?
为什么按照那样查询会只得到time最大(排序后第一条)的一条记录,而不是key相同的一组记录?尽管time已经排了序
from tableName
group by key;
+-----+------+-------+
| key | time | value |
+-----+------+-------+
| 1 | 100 | 5 |
| 2 | 100 | 6 |
+-----+------+-------+
2 rows in set (0.00 sec)mysql> select * from (select * from b1 order by time desc) T group by T.key;
+-----+------+-------+
| key | time | value |
+-----+------+-------+
| 1 | 102 | 9 |
| 2 | 101 | 10 |
+-----+------+-------+
2 rows in set (0.01 sec)
加引号了是升序的,不加是降序?!
我这装的MYSQL。在LINUX下