繁体   English   中英

SQL: SELECT 所有具有最大值和 WHERE 条件的行

[英]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
..........................
..........................

现在我只想要那些具有最大versiondata值为(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM