SQL:来自 table 示例的先前版本

SQL: previous version from table example

我需要一些帮助。 有一个充满数据的 table。 表格类型,item_code,版本

所以我必须 select 实际的表单类型和 item_code。 (实际版本的最大版本)。我尝试了 max 和 greatest,但没有用。所有版本都是 selected。但是不知道为什么。

例如:

select 是:

select formtype, item_code, max(version) 
from table_name;

结果:

我试过最好的,但效果一样。 所以我只需要最后一个版本——实际版本 (9)。 table 包含数千个不同版本的 fromtype 和 item_code。

还有另外一部分。 如果它能工作,我需要 select 以前的版本。 (在示例中表示版本最大值之前)。

我尝试使用子查询。

select b.formtype, b.item_code, max(b.version) from vps_form t,
(select formtype, item_code, version) b 
where t.formtype = b.formtype
and t.item_code = b.item_code
group by b.formtype, b.item_code, b.version;

所以有人可以帮助它是什么问题吗? 谢谢。

关于最大版本记录的详细信息,您可以尝试以下查询:

select formtype, item_code from tablename where version= (select MAX(version) from tablename);

第二个max版本的记录详情,可以使用如下查询:

select formtype, item_code from tablename where version=(select MAX(version) from tablename where version<(select MAX(version) from tablename)); 

您刚刚错过了群组:

select formtype, 
       item_code, 
       max(version) 
from vps_form
group by formtype, item_code;

要获取最新版本和以前的版本,可以使用 window 函数来完成:

select formtype, item_code, version
from (
  select formtype, 
         item_code, 
         version,
         row_number() over (partition by formtype, item_code order by version desc) as rn
  from vps_form 
) t
where rn <= 2
order by formtype, item_code, version;

或者,如果您需要将最新版本和以前的版本作为一行中的两列:

select formtype, item_code, version, prev_version
from (
  select formtype, 
         item_code, 
         version,
         row_number() over (partition by formtype, item_code order by version desc) as rn, 
         lag(version) over (partition by formtype, item_code order by version desc) as prev_version
  from vps_form 
) t
where rn = 2
order by formtype, item_code, version;

SQLFiddle:http://sqlfiddle.com/#!4/2bd0f/2