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
我需要一些帮助。 有一个充满数据的 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