在“选择”上合并oracle中的两个日期列,并在合并列上排序
您好,我有一个select查询,其中我从表中选择了两个不同的日期列,我需要将它们合并到结果中的一列中,并按日期的降序排列。 查询如下所示:在“选择”上合并oracle中的两个日期列,并在合并列上排序,oracle,Oracle,您好,我有一个select查询,其中我从表中选择了两个不同的日期列,我需要将它们合并到结果中的一列中,并按日期的降序排列。 查询如下所示: select work_order_no,install_remove_type,removed_item_id,installed_item_id, removed_performed_on as irdate, installed_performed_on as irdate from install_remove_i
select work_order_no,install_remove_type,removed_item_id,installed_item_id,
removed_performed_on as irdate,
installed_performed_on as irdate
from install_remove_items
where work_order_no is not null
and (installed_item_id = 'IID000174096' or removed_item_id= 'IID000174096')
上述查询的结果是创建了两列
irdate-对于已移除的
及
irdate_1-用于已安装的_
这不是我想要的方式。如何在“irdate”列中包含与日期相关的数据,并按描述顺序进行排序
更新:
install_remove_items表4中的示例数据install_remove_TYPE字段中4种操作类型的记录:
ir_id: xxxxyyyy5555, install_remove_type= 'INSTALL', workOrderno = 22335522, installed_item_id = IID000174096, installed_performed_on = '11/10/2012', removed_item_id = null, removed_performed_on = null.
ir_id: xxxxyyyy3333, install_remove_type= 'REMOVE', workOrderno = 223542, installed_item_id = null, installed_performed_on = null, removed_item_id = IID000174096, removed_performed_on = '11/12/2012'.
ir_id: xxxxyyyy1111, install_remove_type= 'WORKEDON', workOrderno = 111111, installed_item_id = null, installed_performed_on = null, removed_item_id = IID000174096, removed_performed_on = '11/13/2012'.
ir_id: xxxxyyyy2222, install_remove_type= 'REPLACED', workOrderno = 444444, installed_item_id = IID000174096, installed_performed_on = 11/15/2012, removed_item_id = IID000174096, removed_performed_on = '11/14/2012'.
因此,有4种类型的操作:删除操作填充“已删除”字段;安装操作填充“安装”字段;替换操作填充“已删除”字段;工作操作填充“已删除”字段
我想写一个查询,找出与今天的日期相比,最后执行了四个操作中的哪一个,或者根据安装日期和删除日期的输入日期值,并获取该日期
希望这能说明问题
我知道union可能很好,但目前我们用于SQL的Java API不支持union,因此我可能必须结合SQL和Java代码来实现输出
提前感谢。如果您没有输入所需的样本数据,就不完全清楚您想要什么。但会是这样吗
select *
from (select work_order_no,install_remove_type,installed_item_id,
installed_performed_on as irdate
from install_remove_items
where work_order_no is not null
and installed_item_id = 'IID000174096'
union all
select work_order_no,install_remove_type,removed_item_id,
removed_performed_on as irdate
from install_remove_items
where work_order_no is not null
and removed_item_id= 'IID000174096')
order by irdate desc;
根据您的样品修改为:
SQL> select *
2 from (select workOrderno, install_remove_type,
3 case
4 when installed_performed_on > removed_performed_on
5 or removed_performed_on is null then ir.installed_performed_on
6 else removed_performed_on
7 end last_action_date,
8 coalesce(ir.installed_item_id,ir.removed_item_id) item_id
9 from install_remove_items ir
10 where workOrderno is not null
11 and (installed_item_id = 'IID000174096' or removed_item_id= 'IID000174096')
12 order by last_action_date desc )
13 where rownum = 1
14 /
WORKORDERNO INSTALL_RE LAST_ACTI ITEM_ID
----------- ---------- --------- --------------------
444444 REPLACED 15-NOV-12 IID000174096
或者列出您可以执行的每项操作,如下所示:
SQL> select * from install_remove_items;
IR_ID INSTALL_RE WORKORDERNO INSTALLED_ITEM_ID INSTALLED REMOVED_ITEM_ID REMOVED_P
-------------------- ---------- ----------- -------------------- --------- -------------------- ---------
xxxxyyyy5555 INSTALL 22335522 IID000174096 10-NOV-12
xxxxyyyy3333 REMOVE 223542 IID000174096 12-NOV-12
xxxxyyyy1111 WORKEDON 111111 IID000174096 13-NOV-12
xxxxyyyy2222 REPLACED 444444 IID000174096 15-NOV-12 IID000174096 14-NOV-12
3242 REMOVE 43 IID000174097 14-DEC-12
123 INSTALL 123 IID000174097 15-NOV-12
6 rows selected.
SQL> select workorderno, install_remove_type, item_id, last_action_date
2 from (select l.*,
3 row_number() over(partition by item_id order by last_action_date desc) rn
4 from (select workorderno, install_remove_type,
5 case
6 when installed_performed_on > removed_performed_on or
7 removed_performed_on is null then
8 ir.installed_performed_on
9 else
10 removed_performed_on
11 end last_action_date,
12 coalesce(ir.installed_item_id, ir.removed_item_id) item_id
13 from install_remove_items ir
14 where workorderno is not null) l)
15 where rn = 1;
WORKORDERNO INSTALL_RE ITEM_ID LAST_ACTI
----------- ---------- -------------------- ---------
444444 REPLACED IID000174096 15-NOV-12
43 REMOVE IID000174097 14-DEC-12
谢谢,差不多了。我想要的是install_remove_items表中与“installed_performed_on”和“removed_performed_on”相比最接近的记录,即上次发生的事件-install/remove。如果可能的话,我想如果你能展示一些输入和输出数据的样本,会对你有所帮助。谢谢。所以在你的样本数据中,答案应该被替换,对吗?见修改后的回答谢谢DazzaL,这正是我需要的输出。我现在在sql编辑器中使用这个查询,但无法在jaffa持久性api中使用它,因为不支持“我不知道”的情况。我同意如果不使用这些命令,不可能在一个查询中完成这项工作,因为我运行的代码有两个不同的条件,一个用于“删除”字段,另一个用于“安装”字段,并使用java中的数据比较从结果中获取最后的_操作。非常感谢你的帮助。