#sql #oracle
#sql #Oracle
Вопрос:
У меня есть значения таблицы, как показано ниже,
seqno,bill_no,bill_seq,first_name,last_name,phone_number,inserted date
1 11 1 KUTH MUT1 96290 11-OCT-16
2 12 2 KUTH MUT1 2 11-OCT-16
3 13 3 KUTH MUT1 3 11-OCT-16
4 14 4 KUTH MUT1 4 11-OCT-16
5 15 5 KUTH MUT1 5 11-OCT-16
6 16 6 KUTH MUT1 6 13-OCT-16
7 17 7 KUTH MUT1 96290 13-OCT-16
8 18 8 KUTH MUT1 8 13-OCT-16
9 19 9 KUTH MUT1 9 13-OCT-16
10 20 10 KUTH MUT1 96290 13-OCT-16
ожидаемый результат:
- на основе номера телефона он должен группироваться
- он должен сортировать на основе комбинации min seq_number и группы телефонных номеров.
- Старые строки даты всегда идут первыми, например, строка seqno 1 вставляется 11 октября, а 7 и 10 вставляются 13 октября, но результат начинается с минимального seqno и старой даты для группы телефонов, а для seqno 2 следует искать любую новую строку даты, номер телефона которой соответствуетили нет, если не соответствует последовательности 2 .. это будет продолжаться и для других строк.
1 11 1 KUTH MUT1 96290 11-OCT-16
7 17 7 KUTH MUT1 96290 13-OCT-16
10 20 10 KUTH MUT1 96290 13-OCT-16
2 12 2 KUTH MUT1 2 11-OCT-16
3 13 3 KUTH MUT1 3 11-OCT-16
4 14 4 KUTH MUT1 4 11-OCT-16
5 15 5 KUTH MUT1 5 11-OCT-16
6 16 6 KUTH MUT1 6 13-OCT-16
8 18 8 KUTH MUT1 8 13-OCT-16
9 19 9 KUTH MUT1 9 13-OCT-16
Ответ №1:
SELECT seqno,bill_no,bill_seq,first_name,last_name,phone_number,inserted date
FROM (
SELECT seqno,bill_no,bill_seq,first_name,last_name,phone_number,inserted date
, ROW_NUMBER () OVER (PARTITION BY phone_number ORDER BY seqno) AS rank
FROM table)
ORDER BY phone_number,rank
Ответ №2:
Вы хотите сначала упорядочить всю строку по минимальному значению seq_number в каждой группе телефонных номеров, а затем по inserted_date в каждой группе?
Тогда, я думаю, это сделает это:
ВЫБЕРИТЕ seqno,bill_no,bill_seq,first_name,last_name,phone_number,inserted_date ИЗ ( ВЫБЕРИТЕ seqno,bill_no,bill_seq,first_name,last_name,phone_seq,inserted_date , MIN (seqno) ПОВЕРХ (РАЗДЕЛ ПО номеру телефона) КАК минимум ИЗ таблицы1) X ПОРЯДОК ПО минимуму, inserted_date
Ответ №3:
Хотя не совсем ясно, ищете ли вы 2 запроса или 1, но я думаю, что это то, что вы ищете:
select
seqno, bill_no, bill_seq, first_name, last_name, phone_number, inserted date
from
table
group by
phone_number, seqno, bill_no, bill_seq, first_name, last_name, inserted date
order by
phone_number, seqno asc
Комментарии:
1. Я ожидаю одного запроса. На самом деле данные вставляются каждый день с новым порядковым номером. Идея здесь в том, что нужно вставить в первую строку какую-то старую дату с номером телефона, и если новая строка даты имеет ту же строку, то она должна быть рядом со старой строкой даты.
2. Я думаю, что предлагаемый запрос делает это.