如何在SQL每日最高价格查询结果中追加对应时间字段
实现方案
你可以根据使用的数据库类型选择以下两种写法:
1. 窗口函数写法(支持MySQL8.0+、BigQuery、PostgreSQL等主流新数据库,执行效率更高)
SELECT date, time, high AS daily_max_high FROM ( SELECT date, time, high, ROW_NUMBER() OVER (PARTITION BY date ORDER BY high DESC) AS rn FROM `eurusdm1.eurdata112021.forexdata` ) t WHERE rn = 1;
实现逻辑:按日期分组后给同日期内的所有记录按价格从高到低排序,取排序第一的记录即为当日最高价对应的完整记录,可直接拿到对应时间。
2. 关联子查询写法(兼容所有支持标准SQL的数据库)
SELECT t1.date, t1.time, t1.high AS daily_max_high FROM `eurusdm1.eurdata112021.forexdata` t1 INNER JOIN ( SELECT date, MAX(high) AS max_high FROM `eurusdm1.eurdata112021.forexdata` GROUP BY date ) t2 ON t1.date = t2.date AND t1.high = t2.max_high;
实现逻辑:先通过子查询查询到每日对应的最高价格,再关联回原表匹配出该价格对应的时间字段即可。
输出样例
最终查询结果会包含日期、最高价对应的时间、当日最高价三个核心字段:
| date | time | daily_max_high |
|---|---|---|
| 2021-08-06 | 03:15 | 1.17636 |
| 2021-08-09 | 14:20 | 1.17689 |
| 2021-08-10 | 09:45 | 1.17428 |
| 2021-08-11 | 16:05 | 1.17533 |
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

