#sql #oracle
#sql #Oracle
Вопрос:
У меня есть вопрос о том, как создавать группы без регистра when.
У меня есть такие данные:
date1 date2 random num,ber rank within group
01.01.2016 01.01.2016 0.6818 1
01.01.2016 01.01.2016 0.5213 2
01.01.2016 01.01.2016 0.5017 3
01.01.2016 01.01.2016 0.4305 4
01.01.2016 01.01.2016 0.4087 5
01.01.2016 01.01.2016 0.3646 6
31.1.2016 31.1.2016 0.173 1
31.1.2016 31.1.2016 0.1577 2
31.1.2016 31.1.2016 0.1577 3
31.1.2016 31.1.2016 0.1462 4
31.1.2016 31.1.2016 0.1462 5
04.02.2016 04.02.2016 0.5279 1
04.02.2016 04.02.2016 0.4354 2
04.02.2016 04.02.2016 0.4098 3
04.02.2016 04.02.2016 0.387 4
04.02.2016 04.02.2016 0.3823 5
Я хочу создать новый атрибут с именем НОМЕР ГРУППЫ.
Я хочу иметь
01.01.2016 = 1, 31.01.2016 as 2, 04.02.2016 as 3.
Знаете ли вы какой-нибудь трюк, как это сделать без регистра when?
Я пытался:
rank () over (partition by a.date1 order by a.date2 ASC) as group_number
но я получаю только 1 в нем.
Спасибо за вашу помощь. Bara
Комментарии:
1. Если есть какая-то логическая функция (т. Е. Каждые 3 недели или что-то в этом роде), вы можете использовать математику… итак, расскажите нам, как вы на самом деле решаете это.
2. Такой функции нет. Даты являются случайными.
3. у вас есть два столбца даты, вы хотите нумеровать только первый или только второй, или уникальную комбинацию обеих дат?
Ответ №1:
Если я понимаю, вы хотите получить ранг любых дат. Вы можете использовать DENSE_RANK()
select date1, date2 ,random_number, DENSE_RANK() over (order by date1) as rnk
from your_table
Комментарии:
1. Это здорово! Я пробовал это только с разделом, и это не сработало 🙂 отлично!!! спасибо, вы сэкономили мне МНОГО времени!