更新列具有最高值的位置

Jor*_*mus 1 sql sql-server

我正在尝试为具有以下结构的表编写一个简单的“撤消”系统:

id    element    position    start_date    end_date
1       1          23        01/01/2015    05/01/2015
2       2          36        01/01/2015    NULL
3       1          17        05/01/2015    NULL
Run Code Online (Sandbox Code Playgroud)

因此,当为现有元素添加新操作时,它会添加具有新位置和当前日期的新行,并将该元素前一行的 end_date 更改为当前日期。

现在,要撤消此操作,我删除了未定义 end_date 的元素行(这是该元素的最新操作),但随后我必须将前一行的 end_date 更改为null.

因此,在伪语言中,所需的查询是:

UPDATE [table] SET end_date = NULL
WHERE element = 1
  AND start_date = 'highest_start_date_to_be_found_of_this_element'
Run Code Online (Sandbox Code Playgroud)

问题:输入什么而不是highest_start_date_to_be_found_of_this_element让它工作?

Dom*_*m84 5

这应该为您提供每个条目的最新 start_date,这些条目在元素中具有相同的值,如更新语句中定义的值。所以你只需要在一个地方改变它。

UPDATE [table] t SET t.end_date = NULL WHERE t.element = 1 AND t.start_date = (select max(sub.start_date) from [table] sub where sub.element = t.element)
Run Code Online (Sandbox Code Playgroud)