Это может немного прояснить или запутать то, что написали мои предшественники.
Это SQL.И Vertica является одной из баз данных, которые поддерживают стандарт ANSI 2003, та, которая имеет «оконные» функции, также называемые функциями OLAP.Это те, которые добавляют предложение OVER () после вызова функции.Как сказал Гордон выше - этот запрос на самом деле работает - и я просто вставляю ваши входные данные в первое общее табличное выражение - первый список записей исходного предложения WITH.
Вот так:
WITH -- your input ....
input(grp,caseno,p1,p2,p3) AS (
SELECT 'A', 11,'x','x','x'
UNION ALL SELECT 'A', 12,'x','x','x'
UNION ALL SELECT 'C', 21,'x','x','y'
UNION ALL SELECT 'E',323,'y','y','y'
UNION ALL SELECT 'E', 43,'y','y','y'
)
,
find_dups AS (
SELECT
*
, COUNT(*) OVER(PARTITION BY grp,p1,p2,p3) AS occ_count
FROM input
)
SELECT * FROM find_dups;
-- out grp | caseno | p1 | p2 | p3 | occ_count
-- out -----+--------+----+----+----+-----------
-- out A | 11 | x | x | x | 2
-- out A | 12 | x | x | x | 2
-- out C | 21 | x | x | y | 1
-- out E | 323 | y | y | y | 2
-- out E | 43 | y | y | y | 2
-- out (5 rows)
-- out
-- out Time: First fetch (5 rows): 17.462 ms. All rows formatted: 17.514 ms
И: с этого момента вы можете фильтровать по 'occ_count', идентифицировать наибольшее количество упорядоченных дубликатов по occ_count или как вам нужно.