2013-10-10 1 views
1

난에 SQL 쿼리를 작성하는 것을 시도하고있다날짜를 기준으로 주문 ID를 생성하는 SQL 쿼리를 필요

ID SYMBOL Date   OrderID 
112 GR 24-Jan-13  0 
112 FIX 31-Aug-11  0 
112 FIX 29-Sep-11  0 
112 FIX 17-Nov-11  0 
112 MIN 19-Dec-08  0 
112 MIN 05-Feb-09  0 
445 GR 24-Jan-13  0 
445 GR 25-Jul-13  0 
445 FIX 31-Aug-11  0 
445 FIX 29-Sep-11  0 
445 FIX 17-Nov-11  0 

이 같은 출력이 필요처럼 보이는 데이터를 OrderID를 생성 :

ID SYMBOL Date  OrderID 
112 GR  24-Jan-13 1 
112 GR  25-Jul-13 2 
112 FIX  31-Aug-11 1 
112 FIX  29-Sep-11 2 
112 FIX  17-Nov-11 3 
112 MIN  19-Dec-08 1 
112 MIN  05-Feb-09 2 
445 GR  24-Jan-13 1 
445 GR  25-Jul-13 2 
445 FIX  31-Aug-11 1 
445 FIX  29-Sep-11 2 
445 FIX  17-Nov-11 3 

쿼리 : 내이 시도는 :

;with ctes (ID, SYMBOL, date, orderid)as 
(
    select ID, SYMBOL, date , orderid from #temp 

Union all 

select m.ID, m.SYMBOL, m.date, t.orderid + 1 
from ctes t 
inner join #temp m on t.ID = m.id 
and t.symbol = m.symbol 

)select * from ctes 



create table #temp (id int, SYMBOL varchar(5), [Date] datetime, orderid int) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'GR', '24-Jan-13', 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112,'GR', '25-Jul-13', 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'FIX', '31-Aug-11' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'FIX', '29-Sep-11' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'FIX', '17-Nov-11' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'FIX', '14-Jan-13' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Dec-08' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'MIN', '05-Feb-09' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Aug-09' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Sep-13' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(445, 'GR', '24-Jan-13' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(445, 'GR', '25-Jul-13' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(445, 'FIX', '31-Aug-11' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(445, 'FIX', '29-Sep-11' , 0) 
insert into #temp (id, symbol, [date], orderid) 
values(445, 'FIX', '17-Nov-11', 0) 
+3

는 무엇을 시도했다 제시해주십시오 -하지만 어디서 구에서 온 않습니다? – sgeddes

+0

+1은 실행 가능한 예제를 제공합니다. –

답변

2

SQL 서버 실제로위한 buildin 기능을 가지고 :귀하의 경우에는

이 같이 사용할 것이다 :

SQL Fiddle

MS SQL 서버 2008 스키마 설정 : 1

create table dbo.temp (id int, SYMBOL varchar(5), [Date] datetime, orderid int) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'GR', '24-Jan-13', 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112,'GR', '25-Jul-13', 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'FIX', '31-Aug-11' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'FIX', '29-Sep-11' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'FIX', '17-Nov-11' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'FIX', '14-Jan-13' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Dec-08' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'MIN', '05-Feb-09' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Aug-09' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(112, 'MIN', '19-Sep-13' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(445, 'GR', '24-Jan-13' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(445, 'GR', '25-Jul-13' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(445, 'FIX', '31-Aug-11' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(445, 'FIX', '29-Sep-11' , 0) 
insert into dbo.temp (id, symbol, [date], orderid) 
values(445, 'FIX', '17-Nov-11', 0) 

검색어 :

SELECT id,SYMBOL,[Date], 
     ROW_NUMBER()OVER(PARTITION BY id,SYMBOL ORDER BY [Date]) AS OrderId 
    FROM dbo.Temp 
ORDER BY id,SYMBOL,[Date] 

Results :

| ID | SYMBOL |        DATE | ORDERID | 
|-----|--------|----------------------------------|---------| 
| 112 | FIX | August, 31 2011 00:00:00+0000 |  1 | 
| 112 | FIX | September, 29 2011 00:00:00+0000 |  2 | 
| 112 | FIX | November, 17 2011 00:00:00+0000 |  3 | 
| 112 | FIX | January, 14 2013 00:00:00+0000 |  4 | 
| 112 |  GR | January, 24 2013 00:00:00+0000 |  1 | 
| 112 |  GR |  July, 25 2013 00:00:00+0000 |  2 | 
| 112 | MIN | December, 19 2008 00:00:00+0000 |  1 | 
| 112 | MIN | February, 05 2009 00:00:00+0000 |  2 | 
| 112 | MIN | August, 19 2009 00:00:00+0000 |  3 | 
| 112 | MIN | September, 19 2013 00:00:00+0000 |  4 | 
| 445 | FIX | August, 31 2011 00:00:00+0000 |  1 | 
| 445 | FIX | September, 29 2011 00:00:00+0000 |  2 | 
| 445 | FIX | November, 17 2011 00:00:00+0000 |  3 | 
| 445 |  GR | January, 24 2013 00:00:00+0000 |  1 | 
| 445 |  GR |  July, 25 2013 00:00:00+0000 |  2 | 
관련 문제