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

标签 sql sql-server date

我用这种结构创建表 Appointments:

  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');

这是最终结果:

enter image description here

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

   Name    Last Visit    Next Visit
    -----   ----------    -----------
   Lorena   2016-06-02    2016-06-08
   Susan    2016-06-01    2016-06-04

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

最佳答案

执行 GROUP BY,使用 case 表达式来选择最大的先前约会和最小的 future 约会:

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

关于sql - 如何从一个日期获取下一个记录日期和从一个日期获取最后一个记录日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37610924/

相关文章:

sql - 如何在一条SQL语句中更新同一个表中的多行?

sql-server - 部署 VS 数据库项目 (DACPAC) 时处理 SQL 登录名/密码

将 pandas 数据框过滤为仅在两个日期之间处于事件状态的记录的 Pythonic 方法

python - mysql/python 连接器使用参数和字典在处理空值时死亡

sql - Presto中包含 ' '字符的 key 的JSON_EXTRACT问题

sql-server - SQL查询一个月的考勤情况

java - 如何将 Joda LocalDate 转换为 java.util.Date?

php - 选择行 - 还剩 24 小时

sql - Like 查询不返回预期结果

sql - 让 postgres 以 UTC 显示所有 TIMESTAMP WITH TIME ZONE 列