0

我有以下初始数据: 在此处输入图像描述

我想要的是:

在此处输入图像描述

这是逻辑:对于特定“accNumber”的每个“Rest”值,我想将那个特定“Rest”值的最小日期放入“date_in”,对于“date_fin”,我想放入“date”-1相同“accNumber”的“Rest”属性的下一个“日期”的值。我不应该选择具有 0 'Rest' 值的行。另一个问题是特定 accNumber 的最后一个“Rest”值,没有具有相同“accNumber”的即将到来的日期,所以我们应该简单地将日期的最后一个值作为 date_fin(您可以在提供的表格上观察这一点。这是 pleminary work我已经完成了,但它没有按我的意愿工作:

SELECT a.accNumber, a.Rest, MIN(a.Date), MIN(b.Date)
FROM Table1 a
LEFT JOIN Table1 b ON a.accNumber=b.accNumber 
WHERE a.Date<b.Date 
AND a.Rest<>0 
AND a.accNumber=b.accNumber
GROUP BY a.accNumber, a.Rest
ORDER BY a.accNumber

请帮忙。提前致谢

4

2 回答 2

0

据我了解您的问题,您希望开始日期和结束日期按 accnumber 和 rest 分组,其中 rest <> 0

   SELECT A.ACCNUMBER, A.REST, MIN(DATE) AS 'DATE_IN',(SELECT 
    MAX(B.DATE) FROM TABLE1 B 
    WHERE 
    A.DATE<B.DATE AND
    A.REST <> 0 AND
    A.ACCNUMBER = B.ACCNUMBER) AS 'DATE_FIN'
    FROM TABLE1 A
    GROUP BY ACCNUMBER, REST
    ORDER BY ACCNUMBER
于 2013-11-11T12:48:11.867 回答
0

好的现在我理解了你的问题我做了一个应该可以工作的小例子,编辑器没有让我格式化代码对不起

select 
    accNumber,rest, min(Date) date_in, Max(Date) date_fin, 
ROW_NUMBER() OVER(PARTITION BY accNumber ORDER BY MIN(date)) AS Row
INTO #tmp
from table1
GRoup By accNumber,rest
order by accNumber,date_in
select a.accNumber,a.rest, a.date_in, ISNULL(DATEADD(dd,-1,b.date_in),a.date_fin)date_fin
from #tmp a
LEFT JOIN #tmp b ON a.accNumber=b.accNumber and a.Row = b.Row - 1 
where a.rest != 0
order by a.accNumber,a.date_in
drop table #tmp
于 2013-11-11T12:22:58.700 回答