powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как достать первые неск.зап.для каждой уникал.комбинации ключей
8 сообщений из 8, страница 1 из 1
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32299516
konan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем

Есть таблица T(A,B,C) с набором данных
1, 1 ,xxx
1, 1, eee
1, 1, ddd
2, 1, fff
3, 4, ddd
3, 4, dfdd
3, 4, fff
3, 5, kkk
.........
Мне необходимо вытащить только первые две записи для каждой уникальной комбинации A+B
Условие : Это должен быть один запрос.

Может кто даст идею ?
Заранее благодарен.
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32299547
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT DISTINCT T.A, T.B
FROM T
ORDER BY T.A, T.B
FETCH FIRST 2 ROWS ONLY
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32299573
konan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
видно я замароченно написал
из списка представленных записей мне надо получить
1, 1 ,xxx (первое появление 1 +1 )
1, 1, eee (второе появление 1 + 1)
(исключаем все отсальные 1 + 1)
2, 1, fff
3, 4, ddd
3, 4, dfdd

3, 5, kkk
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32299661
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь проблема в сортировке строк.
Придется завести еще одно поле для указания порядка (Q).

WITH Q1(Q, A, B, C) AS
(VALUES(1, 1, 1 ,'xxx'),
(2, 1, 1, 'eee'),
(3, 1, 1, 'ddd'),
(4, 2, 1, 'fff'),
(5, 3, 4, 'ddd'),
(6, 3, 4, 'dfdd'),
(7, 3, 4, 'fff'),
(8, 3, 5, 'kkk')),

Q2(Q, A, B, C) AS
(SELECT Q1.Q, Q1.A, Q1.B, COUNT(Q2.Q)
FROM Q1
INNER JOIN Q1 Q2 ON (Q1.Q >= Q2.Q AND Q1.A = Q2.A AND Q1.B = Q2.B)
GROUP BY Q1.Q, Q1.A, Q1.B
HAVING COUNT(Q2.Q) <= 2)

SELECT Q1.*
FROM Q1
INNER JOIN Q2 ON (Q2.Q = Q1.Q)
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32300116
konan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С небольшой заменой на реальную таблицу, запрос работает !

WITH Q1(Q, A, B, C) AS
(SELECT row_number() over(), COL1, COL2, COL3 FROM REAL_TABLE),

Q2(Q, A, B, C) AS
(SELECT Q1.Q, Q1.A, Q1.B, COUNT(Q2.Q)
FROM Q1
INNER JOIN Q1 Q2 ON (Q1.Q >= Q2.Q AND Q1.A = Q2.A AND Q1.B = Q2.B)
GROUP BY Q1.Q, Q1.A, Q1.B
HAVING COUNT(Q2.Q) <= 2)

SELECT Q1.*
FROM Q1
INNER JOIN Q2 ON (Q2.Q = Q1.Q)

Огромное спасибо 2 Alexey Popov

осталось только решить вопрос как его отработать на таблице с 10млн записей :), но ето уже детали
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32300646
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select
a,b,c
from
(select
row_number() over (partition by a,b order by c) as num,
a,b,c
from
t) ss
where
num = 1
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32300649
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон - последняя строка должна быть:
num <= 2
...
Рейтинг: 0 / 0
Как достать первые неск.зап.для каждой уникал.комбинации ключей
    #32300775
konan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 golsa, спасибо за идею, это работает на порядки быстрее, особенно в моем случае
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как достать первые неск.зап.для каждой уникал.комбинации ключей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]