mysql - 基于事件顺序的 SQL 查询
问题描述
我有一张看起来像这样的表(名称、操作、时间)
c1 sell 10
c1 buy 5
c1 sell 4
c1 buy 3
c1 buy 2
c2 sell 1
c2 buy 2
c3 buy 3
c3 sell 20
c3 sell 15
c3 buy 10
c3 buy 1
我想编写一个 sql 来输出最新操作是卖出的客户,所以在这种情况下我的查询应该返回c1, c3
。
我对 sql 很陌生,所以我不知道如何构建这样的查询。
解决方案
SQL 表表示无序集。因此,没有“最新”操作,除非列指定排序。让我假设该time
列具有此信息。
然后:
select t.*
from t
where t.time = (select max(t2.time)
from t t2
where t2.name = t.name
) and
t.action = 'sell';
如果您只需要客户端,也可以通过聚合来解决此问题:
select name
from t
group by name
having max(time) = max(case when action = 'sell' then time end);
推荐阅读
- jsf - 如何从 WebSocket 类访问托管 Bean
- javascript - 如何向 actions.order.create paypal 集成添加更多属性
- reactjs - React setState 在提交输入表单后不更新状态
- azure-maps - Azure Maps - 检测缩放方向
- xamarin.forms - 如何在 xamarin Forms 中监控蓝牙设备连接状态?
- javascript - 如何转到下一张幻灯片 jQuery
- android - 向上滚动时显示工具栏 - 具有多个捕捉点的 CoordinatorLayout
- php - 默认显示一个 symfony 表单块,但我需要零个块
- java - 如果可以通过反射绕过访问修饰符,它们的目的是什么?
- azure-devops-rest-api - 使用 powershell 脚本获取测试套件的默认测试人员