SQL Server结果与Oracle结果不匹配

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

这是我的Oracle 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
我将此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代码的操作是选择帐户的历史记录,然后选择最新记录