mysql - MySql:如何获取每个组的最新行?
问题描述
我需要为每个符号获取最新的行 ORDERED BY created_at LIMIT 1。所以如果我想要 AAPL 和 GOOGL 最新的行,我会返回第 5 行和第 10 行,因为它们created_at
是最新的。我知道这将类似于SELECT * FROM stocks WHERE symbol IN ("AAPL","GOOGL") ORDER BY created_at
我该怎么做?
stocks
+----+--------+---------------+---------------------------+
| id | symbol | price | created_at |
+----+--------+---------------+---------------------------+
| 1 | AAPL | 498.20 |2020-08-25 17:40:48.692584 |
| 2 | AAPL | 498.21 |2020-08-25 17:42:48.743049 |
| 3 | AAPL | 498.22 |2020-08-25 17:43:48.783471 |
| 4 | AAPL | 498.23 |2020-08-25 17:44:48.844545 |
| 5 | AAPL | 498.24 |2020-08-25 17:45:48.868454 |
| 6 | GOOGL | 100.20 |2020-08-25 17:50:48.901309 |
| 7 | GOOGL | 100.21 |2020-08-25 17:52:48.935137 |
| 8 | GOOGL | 100.22 |2020-08-25 17:54:48.957983 |
| 9 | GOOGL | 100.23 |2020-08-25 17:56:48.973070 |
| 10 | GOOGL | 100.24 |2020-08-25 17:58:49.002871 |
+----+--------+---------------+---------------------------+
Results:
+----+--------+---------------+---------------------------+
| id | symbol | price | created_at |
+----+--------+---------------+---------------------------+
| 5 | AAPL | 498.24 |2020-08-25 17:45:48.868454 |
| 10 | GOOGL | 100.24 |2020-08-25 17:58:49.002871 |
+----+--------+---------------+---------------------------+
解决方案
SELECT t1.*
FROM stocks t1
NATURAL JOIN ( SELECT symbol, MAX(created_at) created_at
FROM stocks
GROUP BY symbol ) subquery
-- WHERE symbol IN ("AAPL","GOOGL")
-- ORDER BY created_at
推荐阅读
- windows - .NET Standard 2.0 - Windows 注册表 - 适用于 Mac OS X - Unity
- r - 替换 r 中的多个值
- formatting - 使用自定义数字格式将正数更改为负数 - 并创建脚本来执行此功能
- node.js - 我无法一次保存多个对象 Mongoose ExpressJs
- sql-server - 数据迁移助手 SQL Server 到 Azure VIEW Server 状态
- spring-boot - Maven 仅使用 jar 文件找不到依赖项
- c# - 通过 vb.net 实用地安装字体列表
- reactjs - 在按钮单击时在反应选项卡之间导航
- kotlin - 我可以在 Kotlin 中编写 gradle buildSrc 吗?
- npm - npm run 脚本删除标志