0

こんにちは私はテーブルから2つの異なる日付列を選択しているselectクエリを持っています、私はそれらを結果の1つの列にマージし、日付の降順で並べ替える必要があります。クエリは次のようになります。

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')

上記のクエリの結果、2つの列が作成されます

irdate-removed_performed_onの場合

irdate_1-installed_performed_onの場合

これは私が望む方法ではありません..「irdate」列に日付関連のデータを入れ、説明順に並べ替えるにはどうすればよいですか?

アップデート:

install_remove_itemsテーブルのサンプルデータ(INSTALL_REMOVE_TYPEフィールドの4つのアクションタイプの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つのタイプがあり、REMOVEアクションには「removed」フィールド、INSTALLアクションには「install」フィールド、REPLACEDアクションには「removed」フィールド、WORKEDONアクションには「removed」フィールドの両方が入力されます。

install_performed_onとremoved_performed_onの日付に基づいて(今日の日付または入力された日付の値と比較して)4つのうち最後に実行されたアクションの種類を見つけるためのクエリを作成します(また、その日付を取得します)。

これが物事を明確にすることを願っています。

ユニオンは良いかもしれませんが、現在SQL用のJava APIはユニオンをサポートしていないため、出力を実現するにはSQLとJAVAコードの組み合わせを実行する必要があるかもしれません。

前もって感謝します。

4

1 に答える 1

1

必要なサンプルデータを入力しないと、必要なものが完全に明確になるわけではありません。しかし、これはそれでしょうか?

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
于 2012-11-14T00:53:03.050 に答える