message.msgid,
message.uid,
message.type,
message.msgtype,
message.msg,
message.time,
message.flowers
FROM
message
GROUP BY
message.uid,
message.type
ORDER BY
message.readed ASC,
message.time DESC;
这样一段代码;
一开始以为是查询time时间降序情况下的”uid与type不同的每组的一条“,后来发现是查询”uid与type不同的每组的一条“后,再对这些数据排序。
所查询到的是按msgid排序的每组的最后一条(我也不知道为什么是最后一条,可能因为msgid为自增长序列?)
那么如何得到按照时间降序排列的,每个uid和type组合的第一条数据呢?
方法一:
SELECT
message.msgid,
message.uid,
message.type,
message.msgtype,
message.msg,
message.time,
message.flowers,
MAX(message.time) AS max
FROM
message
GROUP BY
message.uid,
message.type
ORDER BY
message.readed ASC,
message.time DESC;
方法一使用MAX(time)甄别出每组中time最大的那条数据,自然就是我想要的数据了,尽管这个”max“没有什么实质性作用。
方法二:
SELECT
msgid,
uid,
type,
msgtype,
msg,
time,
flowers
FROM
(SELECT * from message ORDER BY time)
GROUP BY
message.uid,
message.type
ORDER BY
message.readed ASC,
message.time DESC;
方法二现将原表进行排序(默认ASC升序)这样再去查询的时候默认留下最后一条数据自然就是time最大的那条啦!
具体的方法是在网上看来的,自己总结了一下~感谢愿意分享技术的程序员们~