基于事件顺序的SQL查询

时间:2019-03-04 19:40:06

标签: 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还是很陌生,所以我不知道如何构造这样的查询。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以将子查询与通过in运算符连接到主查询的分组一起使用:

select *
  from t
 where action = 'sell'
   and (name, time) in
       (
        select name, max(time)
          from t
         group by name );