#sql #oracle
#sql #Oracle
Вопрос:
Я надеюсь, что вы, ребята, сможете помочь мне с моей проблемой. Прямо сейчас у меня есть запрос ниже:
SELECT ID, (ROW_NUMBER() OVER(ORDER BY ID)), Date
FROM MYTABLE;
вывод:
No. Identification No. Date
1 100010 11-Jul-15
2 100011 7-Jul-15
Я хотел бы, чтобы результат был, возможно ли это?:
No. Identification No. Date
1 100010 7-Jul-15
2 100010 10-Jul-15
3 100010 11-Jul-15
1 100011 7-Jul-15
2 100011 10-Jul-15
3 100011 11-Jul-15
Комментарии:
1. В предоставленном примере данных должна отсутствовать запись.
2. Логика вашего вывода неясна. Почему не 8 и 9 июля? а что, если у вас есть еще одна строка, например, с 3 июля?
3. Почему-то я не понимаю, как ваш SQL-оператор связан с выводом — вывод ROW_NUMBER(), безусловно, не может быть вашим «Идентификационным номером»… Может быть, вы хотите перегородка выход функции row_number() как так: функции row_number() над(раздел по <???> ПОРЯДОК ПО идентификатору)
Ответ №1:
Вам нужен список дат:
select d.dte, t.id,
row_number() over (partition by id order by dte) as num
from t cross join
(select date '2015-07-07' as dte from dual union all
select date '2015-07-10' as dte from dual union all
select date '2015-07-11' as dte from dual
) d;
Комментарии:
1. Я добавил раздел, и он сработал. спасибо за вашу помощь.
Ответ №2:
Вам нужно разделить row_number()
SELECT ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Date) as Row_ord,
ID,
Date
FROM MYTABLE;