Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询日期_Sql_Sql Server - Fatal编程技术网

Sql 查询日期

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”的即将到来的日期,因此我们只需将日期的最后一个值作为日期,您可以在提供的

我有以下初始数据:

我想要的是:

以下是逻辑:对于特定“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