我有一张看起来像这样的表(名称,动作,时间)
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);