SQL SERVER数据分组后取第一条数据——PARTITION BY
-- 不加 distinct(a.id) order by 会有问题 导致获取出来的数据不对
SELECT id,title,description,poster_id,poster_time,drug_id
FROM (
SELECT DISTINCT(a.id) tid, a.* FROM cms_article_info a
WHERE a.drug_id IN ('3647ae61-7d60-4af3-9a75-20e1ba73b5a6','29a13037-28d0-4f7d-8b73-1ce2833153dc')
ORDER BY a.poster_time DESC
) tt
GROUP BY tt.drug_id
原理分析:
我们这里使用了临时表排序,继而对其结果进行分组,结果显示失败,加了distinct(a.id) tid, 后结果正确,原因是因为临时表(派生表derived table)中使用order by且使其生效,必须满足三个条件:
一旦外部表使用了group by,那么临时表(派生表 derived table)将不会执行filesort操作(即order by 会被忽略),所以我在临时表中加了(distinct(a.id))。
加了之后就相当于关闭了该特性,所以也就生效了。
————————————————
版权声明:本文为CSDN博主「山鬼谣me」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013066244/article/details/116461584
在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。