You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB如何按market、coin、period三列分组查询每组最大openTime

Candlestick表分组取最大值查询解决方案

你编写的SQL存在两个核心问题:

  • 子查询中计算MAX(openTime)时是对全表按period分组,返回的是所有币种对应周期的最大时间,不是筛选条件market = 'USDT' AND coin = 'ETH'下的最大值,匹配逻辑自然不符合预期
  • 外层无意义的GROUP BY在MariaDB非严格模式下返回的非聚合字段值不确定,结果不可靠

推荐方案(适配你使用的MariaDB 10.3版本)

优先用窗口函数实现,逻辑更清晰不易出错:

SELECT openTime, market, coin, period
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY period ORDER BY openTime DESC) AS rn
    FROM Candlestick
    WHERE market = 'USDT' AND coin = 'ETH'
) AS temp
WHERE rn = 1;

逻辑说明:内层查询先筛选出符合USDT和ETH条件的记录,按period分组后每组内按openTime倒序排序,用ROW_NUMBER标记排序序号,外层只取每组序号为1的记录,就是每个周期最大openTime对应的完整行。

兼容旧版本方案(无窗口函数场景)

可以用关联子查询实现:

SELECT c.*
FROM Candlestick c
INNER JOIN (
    SELECT period, MAX(openTime) AS max_openTime
    FROM Candlestick
    WHERE market = 'USDT' AND coin = 'ETH'
    GROUP BY period
) AS max_time ON c.period = max_time.period AND c.openTime = max_time.max_openTime
WHERE c.market = 'USDT' AND c.coin = 'ETH';

逻辑说明:先通过子查询拿到USDT-ETH下每个周期对应的最大openTime,再和原表关联匹配,就能拿到每个周期最大时间对应的完整记录。

内容的提问来源于stack exchange,提问作者A. Vreeswijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:07