我有一个Oracle数据库,其中有两个表,如下所示。
ITEMS
ITEM_ID | ITEM_DESC | ITEM_STATUS
============================================
1 | ITEM 1 | A
2 | ITEM 2 | A
3 | ITEM 3 | I
4 | ITEM 4 | A
ITEM_UPDATES
ITEM_ID | LAST_CHANGE | ITEM_STATUS
=============================================
1 | 1/21/2010 |
1 | 4/1/2015 |
2 | 1/21/2010 |
2 | 7/14/2016 |
3 | 1/21/2010 |
3 | 10/21/2011 |
3 | 11/15/2017 |
4 | 11/30/2010 |
我们想更改跟踪此系统中项目状态的方式,我正试图将项目状态列移到项目更新表。过去发生的事情无关紧要,并且可能具有唯一的状态,但是我想为每个记录设置ITEM_status,并将给定ID的MAX(上次更改)设置为ITEMS中当前ITEM_status列的值。所以基本上,完成的桌子会是这样的。
项目更新
ITEM_ID | LAST_CHANGE | ITEM_STATUS
=============================================
1 | 1/21/2010 |
1 | 4/1/2015 | A
2 | 1/21/2010 |
2 | 7/14/2016 | A
3 | 1/21/2010 |
3 | 10/21/2011 |
3 | 11/15/2017 | I
4 | 11/30/2010 | A
我有一个查询来选择下面的正确数据,但是我不知道如何将其转换为update语句,因为我必须比较项id,以及是否有某个项是该项的最大日期记录。这可行吗?
SELECT ITEM_UPDATES.ITEM_ID, ITEMS.ITEM_STATUS, MAX(EFFECTIVE_DATE) AS MAX_DATE
FROM ITEM_UPDATES, ITEMS
WHERE ITEM_UPDATES.ITEM_ID = ITEMS.ITEM_ID
GROUP BY ITEM_UPDATES.ITEM_ID, ITEMS.ITEM_STATUS