sql - SQL 为每个组选择最近的记录
问题描述
我正在尝试获取表中每个用户的最新记录:
SELECT *
FROM Orders
WHERE State = Active
GROUP BY UserId
ORDER BY Orders.DateTimePlanned DESC`
但这导致我得到每个用户的最旧记录,我怎样才能得到最新的记录!?更改DESC
为ASC
不起作用!
请告诉我!
解决方案
您的代码不是有效的标准 SQL。据推测,您正在运行 MySQL 并ONLY_FULL_GROUP_BY
禁用了 sql 模式。
您需要过滤数据集而不是聚合它。一个选项使用子查询:
select *
from orders o
where state = 'Active' and datetimeplanned = (
select max(o1.datetimeplanned)
from orders o1
where o1.userid = o.userid and o1.state = 'Active'
)
您还可以使用窗口函数(仅在 MySQL 8.0 中可用):
select *
from (
select o.*, rank() over(partition by userid order by datetimeplanned desc) rn
from orders o
where state = 'Active'
) o
where rn = 1
推荐阅读
- javascript - 无法使用 javascript 转换在文本框中键入浮点值
- python - 如何从在for循环中迭代的函数返回值
- python - 如何使用 pandas agg 对布尔值求和并始终获得数字作为结果?
- time-series - 绘制时间序列+偏移量不起作用
- dart - 根据内存管理是说最终类型变量还是说最终变量更好
- python - 如何在一个压缩文件和一个未压缩文件上运行`diff`?(bash 或 python)
- c# - 将对象传递给 WCF 端点
- android - 使用 Flutter 在后台上传到 Firestore
- c# - 使用删除空列的 OnDataBound 事件为动态创建的 GridView 表动态显示和隐藏 jQuery DataTables 列
- sql - 将三个不同的 select 语句组合成一 (1) 个