SQL 显示前导、滞后记录的键

苏拉布

我在表中有数据可以通过 SQL 呈现如下:

SELECT T.VERSION_ID T_VERSION_ID
                ,cast(T.START_DATE As Date) as T_START_DATE
                ,cast(ISNULL( LEAD (START_DATE) OVER (ORDER BY START_DATE),'9999-12-31') As Date) as CALC_END_DATE_LEAD
                ,cast(ISNULL( LAG  (START_DATE) OVER (ORDER BY START_DATE),'9999-12-31') As Date) as CALC_END_DATE_LAG
FROM(select 'Vrandom1' as VERSION_ID
            ,cast('22-MAR-2018' As Date) as start_date
            ,'9999-12-31' as end_date
            , 1 as is_approved
    union
    select 'Vrandom2' as VERSION_ID
           ,cast('28-MAR-2018' As Date) as start_date
           ,'9999-12-31' as end_date
           ,1 as is_approved
    union
    select 'Vrandom3' as VERSION_ID
          ,cast('25-MAR-2018' As date) as start_date
          ,'9999-12-31' as end_date
          ,1 as is_approved
    ) as T

输出

T_VERSION_ID  T_START_DATE CALC_END_DATE_LEAD                CALC_END_DATE_LAG

Vrandom1                           22/03/2018                         25/03/2018                                         31/12/9999
Vrandom3                           25/03/2018                         28/03/2018                                         22/03/2018
Vrandom2                           28/03/2018                         31/12/9999                                         25/03/2018

此表在应用程序中使用,其中一条记录说版本“Vrandom3”将生效。对于处理,我需要根据开始日期查找即时领先和落后记录的键。即我需要显示 Vrandom2 和 Vrandom1 作为领先和落后记录的键。

应用中的期望结果:

T_VERSION_ID  T_START_DATE    CALC_END_DATE_LEAD   CALC_END_DATE_LAG   key_leading   key_lagging

Vrandom3      25/03/2018      28/03/2018           22/03/2018          Vrandom2      Vrandom1

或者

T_VERSION_ID  T_START_DATE   CALC_END_DATE_LEAD   CALC_END_DATE_LAG   key_leading   key_lagging

Vrandom1      22/03/2018     25/03/2018           31/12/9999          Vrandom3      null

我可以考虑加入基于 start_date 的内联视图,但有没有更好的方法来实现这一点?

用户1443098

如何添加:

,LEAD (key_col) OVER (ORDER BY START_DATE),'9999-12-31') As Date) as Key_col_LEAD
,LAG (key_col) OVER (ORDER BY START_DATE),'9999-12-31') As Date) as Key_col_LAG

到您的选择

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何选择第n行以最后记录sql?

来自分类Dev

sql最后记录的行花费太长时间查询

来自分类Dev

SQL查询以显示不同的记录

来自分类Dev

Spark2.3 - SQL 获取字符串的前后记录

来自分类Dev

组SQL的滞后函数

来自分类Dev

SQL删除前导零

来自分类Dev

sql显示基于mysql中记录的分区

来自分类Dev

仅显示重复记录-Oracle SQL

来自分类Dev

SQL:从列中显示不同的记录

来自分类Dev

当找不到记录时,sql显示0

来自分类Dev

在SQL中显示包含特定字母的记录

来自分类Dev

SQL查询仅显示少量DISTINCT记录

来自分类Dev

在SQL中显示多个不匹配的记录

来自分类Dev

SQL 显示缺少记录的组

来自分类Dev

SQL Order By - 最后显示某些记录

来自分类Dev

不显示任何给定条件的记录(SQL)

来自分类Dev

无法在SQL连接上显示连接键

来自分类Dev

SQL:同时删除重复记录和更新外键

来自分类Dev

MIN在SQL分析中的滞后

来自分类Dev

C#SQL查询滞后

来自分类Dev

SQL滞后和LEAD查询

来自分类Dev

SQL中日期的滞后函数

来自分类Dev

如何在SQL中不带前导零的情况下显示日期

来自分类Dev

内联后记录消失

来自分类Dev

sql记录获取最新记录-SQL Server

来自分类Dev

禁用日志记录休眠,显示sql false不起作用

来自分类Dev

SQL查询以显示支出历史记录

来自分类Dev

SQL:显示与通用ID相关的所有记录

来自分类Dev

SQL如何按分组显示所有记录