首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回GROUP BY查询中每个组的最后一个值?

如何返回GROUP BY查询中每个组的最后一个值?
EN

Stack Overflow用户
提问于 2021-03-15 09:23:15
回答 1查看 23关注 0票数 0

我需要获取GROUP BY查询中每个组的最后一条记录(关闭字段)。

我有以下数据结构

代码语言:javascript
复制
minute;symbol;timeframe;open;high;low;close;displayed

2021-02-22 00:00:00;EURUSD;M0;1.21103;1.21103;1.21103;1.21103;1
2021-02-22 00:00:00;EURUSD;M0;1.21103;1.21108;1.21103;1.21108;1

2021-02-22 00:02:00;EURUSD;M0;1.21127;1.21127;1.21127;1.21127;1
2021-02-22 00:02:00;EURUSD;M0;1.21127;1.21133;1.21127;1.21133;1

2021-02-22 00:03:00;EURUSD;M0;1.21125;1.21125;1.21125;1.21125;1
2021-02-22 00:03:00;EURUSD;M0;1.21125;1.21125;1.21109;1.21109;1

我尝试了下面的代码,但它似乎返回了整个数据集的最新关闭

代码语言:javascript
复制
   SELECT minute, id, time, date, open, 
                (SELECT close FROM graphs GROUP BY minute ORDER BY minute DESC LIMIT 1) AS close, 
            MIN(low) AS low, 
            MAX(high) AS high
            FROM graphs
            WHERE 
                symbol = 'EURUSD' AND 
                date >= '1420070400' AND 
                date <= '1640995199' AND 
                timeframe = 'M0' AND 
                showed = '1'
            GROUP BY minute

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-03-15 09:27:21

使用row_number()。我不确定确切的逻辑是什么,因为查询引用的time不在示例数据中,而是类似于:

代码语言:javascript
复制
select g.*
from (select g.*,
             row_number() over (partition by minute , symbol order by time desc) as seqnum
      from graphs g
      where g.symbol = 'EURUSD' AND 
            g.date >= '1420070400' AND 
            g.date <= '1640995199' AND 
            g.timeframe = 'M0' AND 
            g.showed = '1'
     ) g
where seqnu = 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66631236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档