Как создавать группы без регистра, когда?

#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. Это здорово! Я пробовал это только с разделом, и это не сработало 🙂 отлично!!! спасибо, вы сэкономили мне МНОГО времени!