我正在尝试为具有以下结构的表编写一个简单的“撤消”系统:
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让它工作?
这应该为您提供每个条目的最新 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)