首页 > 解决方案 > 基于事件顺序的 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 很陌生,所以我不知道如何构建这样的查询。

标签: mysqlsql

解决方案


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);

推荐阅读