Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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查询根据日期生成订单id_Sql_Sql Server_Sql Server 2008_Common Table Expression - Fatal编程技术网

需要SQL查询根据日期生成订单id

需要SQL查询根据日期生成订单id,sql,sql-server,sql-server-2008,common-table-expression,Sql,Sql Server,Sql Server 2008,Common Table Expression,我正在尝试为生成的orderid编写一个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

我正在尝试为生成的orderid编写一个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
需要输出为:

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)

SQL Server实际上有一个内置函数:

在您的情况下,您可以这样使用它:

MS SQL Server 2008架构设置

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]
|  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 |
查询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]
|  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 |

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]
|  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 |

请展示您已经尝试过的内容——但是9来自哪里?+1提供了一个可执行示例。