我有一个如下表
ID,Acct,ParentID,StartTime,Address,City,State,Zip
这包含任意给定数量的客户帐户的多行。每当创建客户时,应用程序都会输入一行。每当客户更改其地址时,都会创建一个新行。因此,客户只能有1行或N行。
我要做的是创建更有用的报告表,其中包括
ID,Acct,ParentID,StartTime,EndTime,Address,City,State,Zip
每当创建新地址时,多行具有EndTime的任何记录。只有一条记录的客户将留下NULL EndTime。
提前致谢
我开发的解决方案更新 - 感谢输入所有这些我想出的
select
ID ,
ACCOUNT_NO ,
PARENTID
STARTTIME ,
MAX(mod_t)OVER( ORDER BY poid_id0 ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) as END_T,
ADDRESS ,
CITY ,
FIRST_NAME ,
LAST_NAME ,
STATE ,
ZIP
答案 0 :(得分:1)
SELECT Adr.ID, Adr.Acct, X.FromDate, Adr.StartTime AS ToDate, Adr.Address, ...
FROM
Adr INNER JOIN
(SELECT MAX(ID) AS ActualAdrID, MIN(StartTime) As FromDate FROM Adr GROUP BY Acct) X
ON Adr.ID = X.ActualAdrID;
我将帐户的地址(我猜一个帐户是一个客户)分组到X.我还假设ID是每个新记录递增的主键。 X将保留一个客户的最后一个ID和第一个StartTime。然后将地址连接到x,这意味着只返回每个cutomer的最后一个地址。因此,Adr.StartTime是最后一个StartTime。第一个StartTime取自子查询X。
编辑:
SELECT
A.ID,
A.Acct,
A.StartTime,
(SELECT MIN(B.StartDate) FROM Adr B WHERE B.Acct=A.Acct AND B.ID>A.ID) AS EndDate,
A.Address,
...
FROM Adr A;