如何从日期和日期的最后一个记录日期获取下一个记录日期?

Esr*_*_92 2 sql sql-server date

我使用这种结构创建表约会:

  CREATE TABLE Appointments
    (
         [Id] bigint, 
         [Name] varchar(250),
         [DateInit] date
    );


INSERT INTO Appointments ([Id],  [Name],  [DateInit])
values 
(1000, 'Lorena', '03/06/2016'),
(1000, 'Lorena', '01/06/2016'),
(1000, 'Lorena', '08/06/2016'),
(1000, 'Lorena', '10/06/2016'),
(1000, 'Lorena', '02/06/2016'),
(1000, 'Lorena', '20/06/2016'),
(7000, 'Susan', '04/06/2016'),
(7000, 'Susan', '08/06/2016'),
(7000, 'Susan', '09/06/2016'),
(7000, 'Susan', '01/06/2016');
Run Code Online (Sandbox Code Playgroud)

这是最终结果:

在此输入图像描述

我需要得到第二天和前一天的结果,例如,如果今天是'03/06/2016'我需要从今天开始在表格中插入最后一个约会的结果,并在表格中插入下一个约会从今天起,我需要的结果是这样的:

   Name    Last Visit    Next Visit
    -----   ----------    -----------
   Lorena   2016-06-02    2016-06-08
   Susan    2016-06-01    2016-06-04
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个结果?谢谢

jar*_*rlh 7

做一个GROUP BY,使用case表达式选择最大的前一个约会,并将未来的约会分开:

select name,
       max(case when DateInit < CONVERT(DATE,GETDATE()) then DateInit end) as LastVisit,
       min(case when DateInit > CONVERT(DATE,GETDATE()) then DateInit end) as NextVisit
from Appointments
group by name
Run Code Online (Sandbox Code Playgroud)

  • CURRENT_DATE = MS SQL Server中的GETDATE(),但它是在datetime上.所以只需使用CONVERT(DATE,GETDATE())来显示日期. (2认同)