查询日期的构造

时间:2013-11-11 12:04:51

标签: sql sql-server

我有以下初始数据: enter image description here

我想要的是:

enter image description here

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

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

请帮忙。提前致谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

据我了解你的问题,你想要开始日期&amp;结束日期按accnumber&amp;休息时休息&lt;&gt; 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