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

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

在日志表里面有個好幾個記錄類,時間不同。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個tag對應(yīng)的msg。。不過實際用的時候發(fā)現(xiàn)。tag會有重復(fù)。
比如tag1 和 tag2 有更加新的時間時,
會搜索出
tag1
tag2
tag1
tag2

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

回答
編輯回答
練命

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

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

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

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

2018年2月5日 18:25