gpt4 book ai didi

vertica - Vertica 中每组查询的前 N ​​个

转载 作者:行者123 更新时间:2023-12-02 16:49:04 27 4
gpt4 key购买 nike

这是一个老问题 - 在 Vertica 中寻找最佳解决方案。想象一个有列的表格:-

A, B, C, D, E

列 A-D 是 int 或 varchar,列 E 是 timestamptz 列,其默认值为 GETUTCDATE()。

表格内容示例:-

1, 2, "AAA", 4, 1404305559
1, 2, "BBB", 23, 1404305633
1, 2, "CCC", 62, 1404305705 <-- the max entry for (1,2,"CCC")
1, 2, "AAA", 123, 1404305740 <-- the max entry for (1,2,"AAA")
1, 2, "BBB", 91, 1404305778 <-- the max entry for (1,2,"BBB")

因此,复合 (A,B,C) 值可能存在重复行(D 列是值,E 列是时间戳)。

我想要一个结果集,其中显示每个唯一的(A、B、C)组合的最新行及其值。因此,上述结果集如下所示:-

1, 2, "CCC", 62, 1404305705  
1, 2, "AAA", 123, 1404305740
1, 2, "BBB", 91, 1404305778

最佳答案

让我们设置示例数据:

CREATE TABLE public.test (
A int,
B int,
C varchar,
D int,
E int
);

INSERT INTO public.test (A, B, C, D, E) VALUES (1, 2, 'AAA', 4, 1404305559);
INSERT INTO public.test (A, B, C, D, E) VALUES (1, 2, 'BBB', 23, 1404305633);
INSERT INTO public.test (A, B, C, D, E) VALUES (1, 2, 'CCC', 62, 1404305705);
INSERT INTO public.test (A, B, C, D, E) VALUES (1, 2, 'AAA', 123, 1404305740);
INSERT INTO public.test (A, B, C, D, E) VALUES (1, 2, 'BBB', 91, 1404305778);

COMMIT;

我们将使用 RANK函数根据 A、B、C 对每一行进行排名,并根据 E 进行排序,并仅返回位于顶部的行(排名为 1)。

SELECT a.a, 
a.b,
a.c,
a.d,
a.e
FROM (SELECT a,
b,
c,
d,
e,
RANK()
OVER (
PARTITION BY a, b, c
ORDER BY e DESC) AS rank
FROM public.test) a
WHERE a.rank = 1;

这将返回:

 A | B |  C  |  D  |     E---+---+-----+-----+------------ 1 | 2 | CCC |  62 | 1404305705 1 | 2 | AAA | 123 | 1404305740 1 | 2 | BBB |  91 | 1404305778

关于vertica - Vertica 中每组查询的前 N ​​个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com