Select 行在一列中具有相同的值而在其他列中具有不同的值
Select rows that has the same value in one column and different in other
我有一个 table 有多个版本的数据。每行都有一个标识符和一个版本。我需要 select 具有更高版本的行,但并非每一行都具有相同的版本。例如:
str_identifier | version | other_data
------------------ |---------------------
abcd | 1
abcd | 3
abcd | 3
qqqq | 2
qqqq | 4
rrrr | 1
rrrr | 1
我需要 select 版本 3 的行 abcd,版本 4 的行 qqqq 和版本 1 的行 rrrr。每个 str_identifier 每个版本都有多个记录,这就是为什么他们重复。
提前致谢。
一种方法是相关子查询:
select v.*
from versions v
where v.version = (select max(v2.version)
from versions v2
where v2.str_identifier = v.str_identifier
);
您还可以使用 window 函数:
select v.*
from (select v.*,
row_number() over (partition by str_identifier order by version desc) as seqnum
from versions v
) v
where seqnum = 1;
听起来 rank()
应该可以解决问题:
SELECT *
FROM (SELECT *, RANK() OVER (PARTITION BY str_identifier ORDER BY version DESC) AS rk
FORM versions)
WHERE rk = 1
您可以使用 JOIN
派生的最大版本号 table 来获取具有该最大值的所有行:
SELECT v.*
FROM versions v
JOIN (SELECT str_identifier, MAX(version) AS version
FROM versions
GROUP BY str_identifier) m ON m.str_identifier = v.str_identifier AND m.version = v.version
我有一个 table 有多个版本的数据。每行都有一个标识符和一个版本。我需要 select 具有更高版本的行,但并非每一行都具有相同的版本。例如:
str_identifier | version | other_data
------------------ |---------------------
abcd | 1
abcd | 3
abcd | 3
qqqq | 2
qqqq | 4
rrrr | 1
rrrr | 1
我需要 select 版本 3 的行 abcd,版本 4 的行 qqqq 和版本 1 的行 rrrr。每个 str_identifier 每个版本都有多个记录,这就是为什么他们重复。
提前致谢。
一种方法是相关子查询:
select v.*
from versions v
where v.version = (select max(v2.version)
from versions v2
where v2.str_identifier = v.str_identifier
);
您还可以使用 window 函数:
select v.*
from (select v.*,
row_number() over (partition by str_identifier order by version desc) as seqnum
from versions v
) v
where seqnum = 1;
听起来 rank()
应该可以解决问题:
SELECT *
FROM (SELECT *, RANK() OVER (PARTITION BY str_identifier ORDER BY version DESC) AS rk
FORM versions)
WHERE rk = 1
您可以使用 JOIN
派生的最大版本号 table 来获取具有该最大值的所有行:
SELECT v.*
FROM versions v
JOIN (SELECT str_identifier, MAX(version) AS version
FROM versions
GROUP BY str_identifier) m ON m.str_identifier = v.str_identifier AND m.version = v.version