我在表格中有以下数据
ID AMOUNT DAYS
1 10 1
1 20 2
1 30 3
1 1 4
2 34 1
2 234 2
2 234 3
2 34 4
3 3 1
3 3 2
3 23 3
3 20 4
我希望下面的结果是所有具有最少ID天的金额
ID AMOUNT DAYS
1 10 1
2 34 1
3 3 1
请提出一个SQL查询以选择所需的输出
答案 0 :(得分:1)
对于您的示例,您可以简单地执行以下操作:
stat = os.stat(path)
stat_dict = lambda path: {name: getattr(stat, field) for field in dir(stat) if field.startswith("st_")}
如果stat_dict = lambda path: {name: getattr(stat, field) for field in dir(stat:=os.stat(path)) if field.startswith("st_")}
不固定,则相关子查询是一种方法:
select t.*
from t
where t.days = 1;
另一种方法是聚合:
1
当然select t.*
from t
where t.days = (select min(t2.days) from t t2 where t2.id = t.id);
/ select t.id, min(t.days) as min_days,
min(t.amount) keep (dense_rank first order by t.days asc) as min_amount
from t
group by t.id;
是另一种选择。
使用row_number()
上的索引和较大的表,以上方法之一在实践中可能会更快。
答案 1 :(得分:0)
您可以使用rank()
功能
select ID, Amount, Days from
(
select rank() over (partition by ID order by days) as rn,
t.*
from tab t
)
where rn = 1;
答案 2 :(得分:0)
首先group by id
查找每个ID的最小天数,然后加入表格
select t.*
from tablename t inner join (
select id, min(days) days
from tablename
group by id
) g on g.id = t.id and g.days = t.days