Group by 不能正确处理订单

Posted

技术标签:

【中文标题】Group by 不能正确处理订单【英文标题】:Group by doesn't work correctly with order 【发布时间】:2015-04-15 12:26:15 【问题描述】:

我的查询看起来像这样给出的结果显示在底部。 问题是,数据没有正确显示。就像您看到的那样,我通过 ORDER BY id DESC 订购了它,它仍然通过 id asc 订购它。但我认为这是因为 GROUP BY。如果我只是使用该子查询,那么它的排序是正确的,但我仍然需要按蜡烛对其进行分组。请问,谁能告诉我我在这里缺少什么?

SELECT *
    FROM (SELECT * 
    FROM eurusd_min_all_t
    ORDER BY `id` DESC
    ) AS t1
GROUP BY candle 


id             time           open   high    low    close   candle
16955   2014-12-30 13:45:00 1.2158  1.2162  1.2154  1.2157  15m
31676   1998-01-05 23:00:00 1.0834  1.0985  1.0815  1.0834  1D
23951   2014-09-26 00:00:00 1.2750  1.2752  1.2748  1.2751  1H
37060   1998-01-30 23:00:00 1.0834  1.1203  1.0733  1.0783  1M
36158   1998-01-09 23:00:00 1.0834  1.0985  1.0778  1.0829  1W
27294   2012-06-15 03:00:00 1.2632  1.2636  1.2614  1.2615  4H
1       2015-01-20 18:25:00 1.1561  1.1565  1.1560  1.1564  5m

【问题讨论】:

GROUPing BY a SELECT * 通常无论如何都没用。在你的情况下,它当然是。缩小要显示的列。 【参考方案1】:

GROUP BY 在正确使用时可以正常工作。如果你滥用语言,你将不会得到你期望的结果。首先阅读此documentation,并了解在聚合查询的select 中有额外列的含义。很抱歉,您希望您的查询做一些语言明确被记录为不做的事情。

如果您想要每根蜡烛的最新id,请使用典型的join/group by 方法:

select t.*
from eurusd_min_all_t t join
     (select candle, max(id) as maxid
      from eurusd_min_all_t
      group by candle
     ) c
     on t.candle = c.candle and t.id = c.maxid;

【讨论】:

非常感谢。这对我很有用。

以上是关于Group by 不能正确处理订单的主要内容,如果未能解决你的问题,请参考以下文章

group by 查找订单的最新状态 join

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

over partition by与group by 的区别

EntityFramework 多个 Group by 查询

利用 group by 的 Loose Index Scan 优化 sql

带有 2 个表的 SQL Server GROUP BY