我有下面的表结构。
CREATE TABLE datatable
(
"DT_ID" NUMBER (10, 0),
"ASSIGNED" NUMBER (1, 0) DEFAULT 0,
"ASSIGNED_DATE_TIME" DATE,
"ASSIGNED_BY" VARCHAR2 (7 BYTE),
"ACCEPTED" NUMBER (1, 0) DEFAULT 0,
"ACCEPTED_DATE_TIME" DATE,
"ACCEPTED_BY" VARCHAR2 (7 BYTE),
"REJECTED" NUMBER (1, 0) DEFAULT 0,
"REJECTED_DATE_TIME" DATE,
"REJECTED_BY" VARCHAR2 (7 BYTE)
);
我需要根据日期查找最新的操作,并将其插入到新表中。
insert into newTable(ID,ACTION_USER,DATE)values(DT_ID,here i need to check the order of ACCEPTED_DATE_TIME,REJECTED_DATE_TIME,ASSIGNED_DATE_TIME and want to find out the latest action and the corresponding owner(xxxxxx_BY)field,the corresponding datetime as assigned_date_time)to be inserted..
例如,如果REJECTED_DATE_TIME
具有最新日期,则rejected_by field = action_user列值。
2条答案
按热度按时间3pvhb19x1#
您可以使用
cross apply
取消透视,然后聚合结果集以检索每行的最新操作日期,同时keep
执行相应的用户。q35jwt9p2#
使用
GREATEST
和CASE
表达式:其中,对于样本数据:
然后,在插入之后,该表包含:
| ID|操作_用户|行动日期|
| --------------|--------------|--------------|
| 1|卡罗尔|2019 -03-01 00:00:00|
fiddle
更新:
如果列中可以有
NULL
值,那么也可以使用COALESCE
,并将这些值合并为一个日期文本,该日期文本保证早于表中的任何其他值:其中,对于样本数据:
然后,在插入之后,该表包含:
| ID|操作_用户|行动日期|
| --------------|--------------|--------------|
| 1|卡罗尔|2019 -03-01 00:00:00|
| 1|黛布拉|2019 -03-01 00:00:00|
fiddle