这是我的 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)
我将此 Oracle 代码转换为此 SQL Server T-SQL 语句:
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?有什么想法吗?
答案 0 :(得分:1)
在任一数据库中,我认为这将是更好的方法:
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;
这将获取具有指定字段的每个帐户的最新行。