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
【问题讨论】:
GROUP
ing 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 子句中
over partition by与group by 的区别
EntityFramework 多个 Group by 查询