2017-09-17 33 views
0

我曾经尝试这样做 -增加billnumber了一年,它在新的一年里再次重置为1

SELECT top(1)billreference 
FROM BIll 
WHERE datepart(yy,date)=datepart(yy,getdate()) 
ORDER BY billreference DESC 

它总是返回我9时候我已经被1

递增我想提高billrefernece number由1,因为它不是identity列 我这样做因为我必须将其重置为1year更改后,并在整个一年中增加.. 任何帮助将不胜感激..

+1

哪个[DBMS] (https://en.wikipedia.org/wi ki /数据库)你在用吗? Postgres的?甲骨文? DB2?火鸟? –

+0

分享您使用的样本数据,期望的输出和DBMS – zarruq

回答

0

假设您的表格在date列中的数据如下所示。

 date1 
------------------- 
01.01.2016 00:00:00 
01.01.2016 00:00:00 
01.01.2016 00:00:00 
01.01.2016 00:00:00 
01.01.2017 00:00:00 
01.01.2017 00:00:00 
01.01.2017 00:00:00 
01.01.2017 00:00:00 

,并要返回billreference 1同年递增,并复位时year变化,下面的查询可以在sql-server一个选项。

SELECT row_number() over(partition BY datepart(yy,date1) 
         ORDER BY date1) AS billreference, 
     date1 
FROM t1; 

其他dbms,ANSI标准extract(year from datecolumn)可以用来代替datepart

结果的:

billreference  date1 
----------------------------------- 
1    01.01.2016 00:00:00 
2    01.01.2016 00:00:00 
3    01.01.2016 00:00:00 
4    01.01.2016 00:00:00 
1    01.01.2017 00:00:00 
2    01.01.2017 00:00:00 
3    01.01.2017 00:00:00 
4    01.01.2017 00:00:00 

您可以查看演示here