SQL Server结果与Oracle结果不匹配
这是我的Oracle SQL语句:SQL Server结果与Oracle结果不匹配,sql,sql-server,Sql,Sql Server,这是我的Oracle SQL语句: select ACCOUNTID as ACCOUNTID, CREATEDDATE as CREATEDDATE, OLDVALUE as OLDVALUE from accounthistory_n_dim where rowid in (select A.ROWID from (select
select
ACCOUNTID as ACCOUNTID,
CREATEDDATE as CREATEDDATE,
OLDVALUE as OLDVALUE
from
accounthistory_n_dim
where
rowid in (select A.ROWID
from
(select
accountid,
row_number() over (partition by accountid order by CREATEDDATE desc) as ROWNUMBER,
CREATEDDATE, ROWID
from
accounthistory_n_dim
where
field = 'CSM_Segment__c') A
where
A.ROWNUMBER = 1)
SELECT
us.CREATEDDATE AS CREATEDDATE,
us.OLDVALUE AS OLDVALUE,
us.ACCOUNTID AS ACCOUNTID
FROM
(SELECT
A.ACCOUNTID,
A.OLDVALUE,
ROW_NUMBER() OVER (PARTITION BY A.accountid ORDER BY A.CREATEDDATE DESC) AS ROWNUMBER,
A.CREATEDDATE
FROM
sales_ent.accounthistory_n_dim_bt A
WHERE
A.field = 'CSM_Segment__c') us
WHERE
us.ROWNUMBER = 1
我将此Oracle代码转换为以下SQL Server T-SQL语句:
select
ACCOUNTID as ACCOUNTID,
CREATEDDATE as CREATEDDATE,
OLDVALUE as OLDVALUE
from
accounthistory_n_dim
where
rowid in (select A.ROWID
from
(select
accountid,
row_number() over (partition by accountid order by CREATEDDATE desc) as ROWNUMBER,
CREATEDDATE, ROWID
from
accounthistory_n_dim
where
field = 'CSM_Segment__c') A
where
A.ROWNUMBER = 1)
SELECT
us.CREATEDDATE AS CREATEDDATE,
us.OLDVALUE AS OLDVALUE,
us.ACCOUNTID AS ACCOUNTID
FROM
(SELECT
A.ACCOUNTID,
A.OLDVALUE,
ROW_NUMBER() OVER (PARTITION BY A.accountid ORDER BY A.CREATEDDATE DESC) AS ROWNUMBER,
A.CREATEDDATE
FROM
sales_ent.accounthistory_n_dim_bt A
WHERE
A.field = 'CSM_Segment__c') us
WHERE
us.ROWNUMBER = 1
但结果不匹配,因为SQL Server中不存在与Oracle rowid等效的对象
从Oracle到SQL Server的转换是否错误?有什么想法吗?在这两个数据库中,我认为这是一个更好的方法:
select ah.*
from (select ah.*,
row_number() over (partition by accountid order by createddate desc) as seqnum
from accounthistory_n_dim ah
where ah.field = 'CSM_Segment__c'
) ah
where seqnum = 1;
这将获取每个具有指定字段的帐户的最近一行。请提供示例数据、所需结果以及代码应执行的操作的说明。oracle代码的操作是选择帐户的历史记录,然后选择最新记录