Sql 查询日期
我有以下初始数据: 我想要的是: 以下是逻辑:对于特定“accNumber”的每个“Rest”值,我想将该特定“Rest”值的“date\u in”最小日期输入,对于“date\u fin”,我想将同一“accNumber”的“Rest”属性的下一个“date”值输入“date'-1”。我不应该选择“Rest”值为0的行。还有一个问题是,对于特定accNumber的最后一个“Rest”值,没有具有相同“accNumber”的即将到来的日期,因此我们只需将日期的最后一个值作为日期,您可以在提供的表中观察到这一点。这是我做过的大量工作,但并没有达到我的目的:Sql 查询日期,sql,sql-server,Sql,Sql Server,我有以下初始数据: 我想要的是: 以下是逻辑:对于特定“accNumber”的每个“Rest”值,我想将该特定“Rest”值的“date\u in”最小日期输入,对于“date\u fin”,我想将同一“accNumber”的“Rest”属性的下一个“date”值输入“date'-1”。我不应该选择“Rest”值为0的行。还有一个问题是,对于特定accNumber的最后一个“Rest”值,没有具有相同“accNumber”的即将到来的日期,因此我们只需将日期的最后一个值作为日期,您可以在提供的
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
请帮忙。提前谢谢好的,现在我理解了你的问题,我做了一个小例子,应该可以用,编辑不让我格式化代码。对不起
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
据我所知,您希望开始日期和结束日期按accnumber和rest分组,其中rest为0
谢谢,但这不是我想要的,date_fin不仅仅是max date,它是即将到来的剩余值的最小日期-1哦,对不起,我误解了这个问题!你在使用存储过程吗?我不知道这到底是什么意思,但很可能我没有使用它,这并不是我想要的。我希望DATE\u FIN是不同“Rest”估价师的下一个“DATE”-1的日期,您说您不想选择Rest=0行,但结果行似乎包含来自“DATE-1”的数据。哪个是正确的?请注意,由于可变精度类型的工作方式,最好存储/使用日期的独占上限。它只从日期值中获取日期值,而不包含0个rest值
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