Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как достать первые неск.зап.для каждой уникал.комбинации ключей / 8 сообщений из 8, страница 1 из 1
21.10.2003, 11:50
    #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
21.10.2003, 11:59
    #32299547
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать первые неск.зап.для каждой уникал.комбинации ключей
SELECT DISTINCT T.A, T.B
FROM T
ORDER BY T.A, T.B
FETCH FIRST 2 ROWS ONLY
...
Рейтинг: 0 / 0
21.10.2003, 12:06
    #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
21.10.2003, 12:46
    #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
21.10.2003, 16:00
    #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
22.10.2003, 06:58
    #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
22.10.2003, 07:01
    #32300649
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать первые неск.зап.для каждой уникал.комбинации ключей
пардон - последняя строка должна быть:
num <= 2
...
Рейтинг: 0 / 0
22.10.2003, 09:55
    #32300775
konan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как достать первые неск.зап.для каждой уникал.комбинации ключей
2 golsa, спасибо за идею, это работает на порядки быстрее, особенно в моем случае
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как достать первые неск.зап.для каждой уникал.комбинации ключей / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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