Mysql Sql查询使用Sql查询将第二行数据显示为第一行,将第三行数据显示为第二行,依此类推

Mysql Sql查询使用Sql查询将第二行数据显示为第一行,将第三行数据显示为第二行,依此类推,mysql,sql-server,Mysql,Sql Server,我的sql server中有一个表。该表有一列 示例表名称:Sample 列名:数据 资料 ----------- 7/11/2014 12:00:00 AM 7/31/2014 12:00:00 AM 8/21/2014 12:00:00 AM 9/19/2014 12:00:00 AM 11/20/2014 12:00:00 AM 12/18/2014 12:00:00 AM 1/22/2015 12:00:00 AM 因此,通过这个数据,我想添加一个额外的列,在该列中,我想将

我的sql server中有一个表。该表有一列

示例表名称:Sample

列名:数据

资料

-----------
7/11/2014 12:00:00 AM

7/31/2014 12:00:00 AM

8/21/2014 12:00:00 AM

9/19/2014 12:00:00 AM

11/20/2014 12:00:00 AM

12/18/2014 12:00:00 AM

1/22/2015 12:00:00 AM
因此,通过这个数据,我想添加一个额外的列,在该列中,我想将第二行数据放入第一行,第三行数据放入第二行…以此类推

例如:

data                        New Column                                                                         

-----------                  ----------------------                                                                                      

7/11/2014 12:00:00 AM        7/31/2014 12:00:00 AM                                                                                               

7/31/2014 12:00:00 AM        8/21/2014 12:00:00 AM                                                                                              

8/21/2014 12:00:00 AM        9/19/2014 12:00:00 AM                                                                                              

9/19/2014 12:00:00 AM        11/20/2014 12:00:00 AM                                                                                                                                                                              

11/20/2014 12:00:00 AM       12/18/2014 12:00:00 AM                                                                                                                         

12/18/2014 12:00:00 AM       1/22/2015 12:00:00 AM                                                                                              

1/22/2015 12:00:00 AM        Null   

为我提供如何获得预期输出的建议。

测试数据

DECLARE @Table TABLE (DateColumn DATETIME)

INSERT INTO @Table VALUES 
('7/11/2014 12:00:00 AM'),
('7/31/2014 12:00:00 AM'),
('8/21/2014 12:00:00 AM'),
('9/19/2014 12:00:00 AM'),
('11/20/2014 12:00:00 AM'),
('12/18/2014 12:00:00 AM'),
('1/22/2015 12:00:00 AM')
查询

;WITH CTE AS
(
 SELECT DateColumn
       ,ROW_NUMBER() OVER (ORDER BY DateColumn) rn  
 FROM @Table
 )
SELECT A.DateColumn AS DateColumn1
      ,B.DateColumn AS DateColumn2
FROM CTE A 
LEFT JOIN CTE B ON A.rn = B.rn - 1
结果

╔═════════════════════════╦═════════════════════════╗
║       DateColumn1       ║       DateColumn2       ║
╠═════════════════════════╬═════════════════════════╣
║ 2014-07-11 00:00:00.000 ║ 2014-07-31 00:00:00.000 ║
║ 2014-07-31 00:00:00.000 ║ 2014-08-21 00:00:00.000 ║
║ 2014-08-21 00:00:00.000 ║ 2014-09-19 00:00:00.000 ║
║ 2014-09-19 00:00:00.000 ║ 2014-11-20 00:00:00.000 ║
║ 2014-11-20 00:00:00.000 ║ 2014-12-18 00:00:00.000 ║
║ 2014-12-18 00:00:00.000 ║ 2015-01-22 00:00:00.000 ║
║ 2015-01-22 00:00:00.000 ║ NULL                    ║
╚═════════════════════════╩═════════════════════════╝

表中是否有任何主键?在检索数据后,是否有理由不使用php或python之类的脚本语言执行此操作?您是否可以在下面的问题中建议我,我在第1行获得输出,但为空值谢谢您的回答
DECLARE @Table TABLE (DateColumn DATETIME)

INSERT INTO @Table VALUES 
('7/11/2014 12:00:00 AM'),
('7/31/2014 12:00:00 AM'),
('8/21/2014 12:00:00 AM'),
('9/19/2014 12:00:00 AM'),
('11/20/2014 12:00:00 AM'),
('12/18/2014 12:00:00 AM'),
('1/22/2015 12:00:00 AM')

;WITH CTE AS (
select DateColumn,ROW_NUMBER()OVER (ORDER BY DATECOLUMN)RN from @Table
)
select  DATECOLUMN,  DATECOLUMN  As NewColumn from CTE WHERE RN  > 1
UNION ALL 
select  DATECOLUMN,CASE WHEN RN = 1 then NULL ELSE ' ' END  As NewColumn 
from CTE  WHERE RN  = 1 
ORDER BY DATECOLUMN