sql—按字段值将表拆分为五个

yc0p9oo0  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(310)

我是sql的新手,我面临着这个问题。
我有一个名为'type'的字段,它由5个不同的响应组成,'a'、'b'、'c'、'd'、'e'。每一个都有一个“结果”、“是”或“否”。
这张table看起来像这样

id code type result  
1   100  A    no  
2   100  A    yes  
3   100  A    no  
4   100  B    yes  
5   100  B    yes  
6   500  B    yes  
7   500  B    yes  
8   200  A    yes  
9   200  A    yes  
10  100  C    no  
11  100  C    yes  
12  200  B    yes  
13  500  B    yes  
14  500  C    yes

max(id)是每种类型的最新结果。
我有兴趣得到这样的东西,
a型表:
代码最大(id)结果
100 3不
2009是的
b型表:
代码最大(id)结果
100 5是的
500 13是的
以此类推(其他类型的表)。
我需要你的帮助!
谢谢,伊奥安娜

bq9c1y66

bq9c1y661#

请使用下面的查询,

select code, max(id), result from table
group by code, result , type;
628mspwn

628mspwn2#

select your_table.* from your_table 
join (
    select max(ad) maxid from your_table
    group by type, result
) t on your_table.id = t.maxid
ulydmbyx

ulydmbyx3#

执行此操作的规范方法使用相关子查询:

select t.*
from t
where t.id = (select max(t2.id) from t t2 where t2.type = t.type and t2.code = t.code);

特别是,这可以利用 (type, code, id) 在许多数据库中经常得到很好的优化。
另一种常用方法是使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by type, code order by id desc) as seqnum
      from t
     ) t
where seqnum = 1;

相关问题