2013-05-14 4 views
1

У меня есть таблица с двумя колонками (startTime, endTime), это из типа dataTime.sql server 2008 r2 top (1) обновить дату не работает

, когда я вставить строку в этой таблице, я хочу, чтобы обновить предыдущие данные в этой таблице, как это:

update endTime in the row which has most recent (max) startTime 

я работал (как другой поток, скажите мне), как это:

BEGIN 
    ;with T as(
    select *, ROW_NUMBER() over (order by startTime desc) RNum 
    from Order_Status 
    where [email protected] 
    ) 
    update top(1) T set [email protected] 
    END 

но похоже, что он обновляет маленький (самый старый) не самый последний.

что является правильным, пожалуйста,

ответ

3

Вы на самом деле не применяя упорядоченность от метода ROW_NUMBER, вы хотите что-то вроде этого:

BEGIN 
;with T as(
    select *, ROW_NUMBER() over (order by startTime desc) RNum 
    from Order_Status 
    where [email protected] 
) 
    update T set [email protected] 
    from (select top 1 * from T order by RNum ASC) T 
END 

Или быть немного аккуратнее, это должно работать (непроверенные):

BEGIN 
;with T as(
    select top 1 * 
    from Order_Status 
    where [email protected] 
    order by startTime desc 
) 
    update T set [email protected] 
END 
+0

даже ваш код, по-прежнему обновления наименьшую (старые) –

+0

Необходимо заказывать по возрастанию на RNum начиная с startTime отсортировано по убыванию. Еще ... +1 для второго решения :). –

+0

да второй работает :) :) большое спасибо –

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