鍍金池/ 問答/Java  數(shù)據(jù)庫/ 如何實(shí)現(xiàn)GROUP BY DESC?現(xiàn)在出來的結(jié)果正好和我要的相反。

如何實(shí)現(xiàn)GROUP BY DESC?現(xiàn)在出來的結(jié)果正好和我要的相反。

在日志表里面有個(gè)好幾個(gè)記錄類,時(shí)間不同。SQL例子如下
SELECT msg , tag FROM log_info
WHERE DATE_FORMAT(createTime, '%Y-%m-%d') = DATE_FORMAT(CURDATE(), '%Y-%m-%d')
AND type='File' AND (tag = 'tag1' or tag='tag2' or tag = 'tag3' or tag='tag4')
GROUP BY tag,createTime
ORDER BY createTime DESC
LIMIT 4

是用來查詢當(dāng)天最新的4個(gè)tag對應(yīng)的msg。。不過實(shí)際用的時(shí)候發(fā)現(xiàn)。tag會(huì)有重復(fù)。
比如tag1 和 tag2 有更加新的時(shí)間時(shí),
會(huì)搜索出
tag1
tag2
tag1
tag2

說的有的亂,不知道能不能看到。。
原本想用子查詢先將結(jié)果排序在group by,但是返回結(jié)果一直是最早創(chuàng)建的在前面。。所以自己用這種limit的方式截取,然而發(fā)現(xiàn)有BUG。。

回答
編輯回答
練命

想了半天,看了上面的答案后還是有點(diǎn)懵,結(jié)果晚上自己莫名奇妙的寫出來了。。
參考上面用max(creatime) time ,會(huì)發(fā)現(xiàn)結(jié)果出來的集合中time和creatime不一樣的。這也是導(dǎo)致為啥group by 不是我要的東西。
首先找到select mix(creatime) time ,tag From log_info 然后限定條件,排序。
得出一個(gè)4個(gè)tag,然后有最新的time的表
然后用原表內(nèi)連接,限定條件是子查詢的time = 原表的createtime, tag= 原表的tag
然后結(jié)果就出來了。。

2018年3月20日 04:22
編輯回答
乞許

有個(gè)問題: 結(jié)果有msg,分組的時(shí)候怎么沒msg字段?

思路:第一次查詢內(nèi)容為 tag 和 max(createTime),然后就找到了tag和最后更新時(shí)間的關(guān)系,排序,然后根據(jù)tag找對應(yīng)msg就行

2018年2月5日 18:25