我有一个看起来像这样的表(名称,动作,时间)
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还是很陌生,所以我不知道如何构造这样的查询。
答案 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 );