我有一张以下性质的表格。此表所在的数据库上的事务处理遵循一个路径,在该路径中,用户可以更改一个,多个或所有项的交付日期。现在,我想要的是一组行,用户更新对应于特定项目的交付日期。您可以看到PO_Number对于所有项目都是相同的,因此PO_Date也是如此。那么,如何查询和显示所需的行?
PO_NO PO_DT ITEM_CODE DEL_DATE UPDATED_ON OLD_DEL_DATE NEW_DEL_DATE
========================================================================================
01T0012384 20/05/2015 UP01662 24/06/2015 23/5/2015 20/06/2015 24/06/2015
01T0012384 20/05/2015 UP01762 22/06/2015 21/5/2015 20/06/2015 22/06/2015
01T0012384 20/05/2015 UP01661 24/06/2015 23/5/2015 20/06/2015 24/06/2015
01T0012384 20/05/2015 UP01763 22/06/2015 21/5/2015 20/06/2015 22/06/2015
如果用户执行了他的上一次交易并更新了item_code-(UP01662,UP01661)的交付日期,请考虑一天(例如)第10次。然后最后我想要的只是一个查询,它只为这两个项目提取数据集,而不是其他任何内容。
非常感谢任何帮助。
答案 0 :(得分:0)
declare @objectid int
select @objectid = object_id from sys.objects where name = 'YOURTABLENAME'
select top 1 * from sys.dm_db_index_usage_stats where object_id = @objectid
and last_user_update is not null
order by last_user_update
答案 1 :(得分:0)
我们的想法是创建自定义函数以检查是否有任何列被更改以及更新后的触发器。如果您知道某些列必须始终随每次更新而更改,那么更容易检查您的行是否已更改 - 否则您必须检查user_tab_columns中所有列的列。
对于通用方法,请检查: https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:59412348055
答案 2 :(得分:0)
如果您需要,请告诉我。
create table xx_ap_orders ( po_number varchar2(10)
, item_code varchar2(10)
, amount number
, updated_date date
);
所以,情景是:
所有记录都在5天前更新
带有MOUSE项目代码的行已于4天前更新
CABLE和BATERY项目代码在2天前更新。
表格中的记录如下:
insert into xx_ap_orders values ('PO_500','LAPTOP', 3500, trunc (sysdate - 5) );
insert into xx_ap_orders values ('PO_500','MOUSE', 200, trunc (sysdate - 4) );
insert into xx_ap_orders values ('PO_500','CABLE', 100, trunc (sysdate - 2) );
insert into xx_ap_orders values ('PO_500','BATERY', 500, trunc (sysdate - 2) );
如果您只想选择CABLE和BATERY记录(上次更新),您可以使用以下SQL:
SELECT * FROM (
SELECT po_number
, item_code
, amount
, updated_date
, rank() OVER (PARTITION BY po_number
order by updated_date desc) rank_updated
FROM XX_AP_ORDERS)
WHERE rank_updated = 1
;