我有一张看起来像这样的表(名称,动作,时间)

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

10-08 00:11