![](/img/trans.png)
[英]SQL - How to select rows with the same ID values where all other column values are also identical
[英]SQL : SELECT all rows with maximum values and with WHERE condition also
我的表格如下所示:
id data version rulecode
---------------------------
a1 1 100 x1
a2 1 100 x1
a1 1 200 x2
a4 2 500 x2
a7 2 200 x1
a6 2 500 x1
a7 2 500 x2
a8 2 150 x2
a9 3 120 x1
a10 3 130 x2
a10 3 120 x1
a12 3 130 x2
a13 3 130 x1
a14 3 110 x2
a15 3 110 x1
a16 4 220 x1
a17 4 230 x2
a18 4 240 x2
a19 4 240 x1
..........................
..........................
现在我只想要那些具有最大version
和data
值为(1,2 和 4)的行
当我尝试使用dense_rank()
时,我只从data
列中获取那些具有1
值的行:
SELECT * FROM
(SELECT *, dense_rank() OVER (ORDER BY version desc) as col
FROM public.table_name WHERE data in (1,2,4))x
WHERE x.col=1
Output:
id data version rulecode
---------------------------
a1 1 200 x2
我预期的 output:
id data version rulecode
a1 1 200 x2
a4 2 500 x2
a6 2 500 x1
a8 2 500 x2
a18 4 240 x2
a19 4 240 x1
注意: data
列的值是直到百万。
有人可以在这里帮我得到预期的 output 吗?
使用解析函数:
WITH cte AS (
SELECT *, MAX(version) OVER (PARTITION BY data) max_version
FROM yourTable
)
SELECT id, data, version, rulecode
FROM cte
WHERE version = max_version AND data IN (1, 2, 4);
请注意,我们还可以过滤 CTE 中的data
值。 我将保持原样,以便为您的问题提供一般解决方案。
你似乎想要一个PARTITION BY
:
SELECT *
FROM (SELECT *,
DENSE_RANK() OVER (PARTITION BY data ORDER BY version desc) as seqnum
FROM public.table_name
WHERE data in (1, 2, 4)
) x
WHERE x.seqnum = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.