2013-11-19 3 views
2

Я имею данные, как показано нижеместа на основе последовательности дат

**Heading Date** 
A   2009-02-01 
B   2009-02-03 
c   2009-02-05 
d   2009-02-06 
e   2009-02-08 

мне нужна ранг ниже

Heading Date   Rank 
A   2009-02-01  1 
B   2009-02-03  2 
c   2009-02-05  1 
d   2009-02-06  2 
e   2009-02-07  3 

Как мне нужно ранг на основе даты. Если дата непрерывная, ранг должен быть 1, 2, 3 и т. Д. Если есть какие-либо перерывы в датах, мне нужно начать с 1, 2, ...

Может ли кто-нибудь помочь мне в этом?

+2

Не было бы 1, 1, 1, 2, 3? –

+1

Примеры данных как sqlfiddle здесь: http://sqlfiddle.com/#!15/5f4f8. –

+0

Являются ли даты заказаны согласно «заголовку»? Может ли быть более одной даты на «заголовок»? –

ответ

0

Привет это не правильный ответ, я стараюсь .. Это интересно .. :) Я отправляю то, что я до сих пор: sqlfiddle

SELECT 
    rank() over (order by thedate asc) as rank, 
    heading, thedate 
FROM 
    demo 
Order by 
    rank asc; 

Теперь я пытаюсь получить перерыв в датах , Я не знаю, как? Но может быть эти ссылки полезные

Я буду обновлять, если я что-нибудь.

Edit:

Я получил это для MySQL, я отправляю это, потому что это может полезно. Проверить Emulate Row_Number() Здесь

Учитывая таблицу с двумя столбцами я и J, генерировать результирующий набор, который имеет производный последовательный столбец row_number принимая значения 1,2,3, ... для определенного упорядочения J который сбрасывается в 1, когда значение I изменяется

+0

Бангалор BLR - Технический парк Багмане 2013-10-11 Центр обработки данных 0 Бангалор BLR - Технический парк Багмане 2013-10-11 BMS 0 Бангалор BLR - Технический парк Багмане 2013-10-12 BMS 0 Бангалор БЛР - Технический парк Багмане 2013-10 -15 BMS 3 У меня есть данные lyk this .. Если последний столбец равен нулю, ранг должен быть сделан на основе всех столбцов. Если дата непрерывна, как 2013-10-11, 2013-10-12 ранг должно быть 1,2 ... Если есть какие-либо перерывы на дату 2013-10-11, 2013-10-12 и 2013-10-15 снова рейтинг должен начинаться с 1 на 2013-10-15 – user3007361

2
SELECT heading, thedate 
     ,row_number() OVER (PARTITION BY grp ORDER BY thedate) AS rn 
FROM (
    SELECT *, thedate - (row_number() OVER (ORDER BY thedate))::int AS grp 
    FROM demo 
    ) sub; 

в то время как вы говорите «ранга» вы, кажется, хотите результат оконной функции row_number().

  1. Сформируйте группы последовательных дней (та же дата в grp) в подзапрос sub.
  2. Число строк с другим номером row_number() звонок, на этот раз разделенный на grp.

Один подзапрос является минимальным здесь, поскольку функции окна не могут быть вложенными.

SQL Fiddle.

Обратите внимание, что я пошел со второй версией ваших противоречивых данных образцов. И результат такой как @mu suggested в его комментарии.
Также предполагается, что нет повторяющихся дат. В этом случае вам нужно сначала заполнить агрегат.

0

Бангалор BLR - Технологический парк Bagmane 2013-10-11 Data Center 0 Бангалор BLR - Технологический парк Bagmane 2013-10-11 BMS 0 Бангалор BLR - Технологический парк Bagmane 2013-10-12 BMS 0 Бангалор BLR - Технологический парк Bagmane 2013-10-15 BMS 3

Я имею лыки данных это ..

Если последний столбец равен нуль, то ранг должен быть сделан на основе всех columns..If дата непрерывно как 2013 -10-11, 2013-10-12 ранг должен быть 1,2 ...

Если есть перерыв в 2013-2013 годах, 2013-10-12 и 2013-10-15 снова рейтинг должен начинаться с 1 на 2013-10-15

+0

Это должно вероятно, другой вопрос (или редактирование этого), а не ответ. Но перед отправкой вопроса добавьте версию Postgres, определения таблиц и объясните, что должно быть сделано на основе всех столбцов. –

Смежные вопросы