2016-02-19 2 views
0

Мне нужна помощь в определении последней измененной цены по датам, для которых я пытаюсь создать столбец Unique-Identifier, поэтому я могу применить раздел к этому новому столбцу и получить дополнительную логику в своем программировании. Не могли бы вы помочь мне получить столбец Unique-Identifier?SQL - Хотите предоставить уникальный ранг для одного и того же набора значений?

Date  | OrderID | Price | Seq_no |Unique-Indentifier 
1/24/2015 | 568956 | 300 | 1 | 1 
1/20/2015 | 568956 | 350 | 1 | 2 
1/20/2015 | 568956 | 375 | 2 | 3 
1/20/2015 | 568956 | 400 | 3 | 4 
1/17/2015 | 568956 | 400 | 1 | 4 
1/14/2015 | 568956 | 500 | 1 | 5 
1/11/2015 | 568956 | 500 | 1 | 5 
1/9/2015 | 568956 | 400 | 1 | 6 
1/7/2015 | 568956 | 400 | 1 | 6 
1/24/2015 | 568957 | 600 | 1 | 7 
1/20/2015 | 568957 | 600 | 1 | 7 
1/17/2015 | 568957 | 700 | 1 | 8 
1/14/2015 | 568957 | 800 | 1 | 9 
1/11/2015 | 568957 | 800 | 1 | 9 
1/9/2015 | 568957 | 700 | 1 | 10 
1/7/2015 | 568957 | 700 | 1 | 10 

Я не могу применить раздел в колонке «Цена». Причина: для OrderID '568956' такая же цена 400 была установлена ​​в две разные даты. Я хотел изолировать эти два набора. Если я просто использую раздел в столбце Price Column, тогда я получу все четыре строки как один набор. Поэтому мне нужно поместить некоторый идентификатор, чтобы разграничить эти строки и применить раздел в моем новом столбце «UniqueIdentifier».

Set 1: 
1/20/2015   568956 400   4  
1/17/2015   568956 400   4 


Set 2: 
1/9/2015    568956 400   6  
1/7/2015    568956 400   6 

Если я применяю раздел я получаю результат как один набор - Какой я не ожидал.

Set 1: 
1/20/2015    568956 400   4  
1/17/2015    568956 400   4  
1/9/2015    568956 400   4  
1/7/2015    568956 400   4 
+0

Можете ли вы показать SQL, который используете? Я не совсем понимаю вопрос и как вы получаете эти значения для набора 1 – gimbel0893

+0

Почему вы вызываете столбец «уникальный идентификатор», когда он явно не уникален? –

ответ

0

В вашем отборного заявления сделать что-то вроде этого:

SELECT 
DISTINCT 
    ROW_NUMBER() OVER(PARTITION BY Date,OrderID,Price ORDER BY Date DESC) AS RowNum 
    ,Date 
    ,OrderID 
    ,Price 

Вы, возможно, придется возиться с разделом PARTITION BY в зависимости от того, как работает ваш оператор выбора, но когда я использовал это возвращает уникальный номер строки для каждого значения.

Я не уверен, что если вы будете в состоянии точно ORDER BY это значение даты, так что вы, возможно, придется преобразовать его в DATETIME

0

Вы должны определить группы, а затем присвоить порядковый номер. Один из методов - это разность чисел строк. Я думаю, что это логика:

select t.*, 
     dense_rank() over (partition by orderid order by grp, price) as newcol 
from (select t.*, 
      (row_number() over partition by orderid order by date, seq_no) - 
       row_number() over partition by orderid, price order by date, seq_no) 
      ) as grp 
     from t 
    ) t 
+0

Спасибо, Гордон, это мне очень помогло. Была одна проблема, когда в тот же день было несколько изменений цен. 1/24/2015 | 568956 | 300 | 1 1/20/2015 | 568956 | 350 | 2 1/20/2015 | 568956 | 375 | 2 1/20/2015 | 568956 | 400 | 2 01.01.2015 | 568956 | 400 | 2 – Parthi

+0

@Parthi. , , В ваших данных нет примеров этого. Вам нужно включить другой столбец вместе с «date», чтобы указать правильный порядок. –

+0

Извините за мисс. Я просто обновил вопрос. 1/20/2015 | 568956 | 350 | 2 1/20/2015 | 568956 | 375 | 3 – Parthi