Sql 检索时间间隔的行,但也检索每个时间间隔的前一行-如何?

Sql 检索时间间隔的行,但也检索每个时间间隔的前一行-如何?,sql,Sql,我有一张这样的桌子: Id FKId Amount1 Amount2 Date ----------------------------------------------------- 1 1 100,0000 33,0000 2018-01-18 19:57:39.403 2 2 50,0000 10,0000 2018-01-19 19:57:57.097 3 1 130,0000 40,0000 2018-01-20 19:58:13.

我有一张这样的桌子:

Id  FKId  Amount1   Amount2 Date
-----------------------------------------------------
1   1     100,0000  33,0000 2018-01-18 19:57:39.403
2   2      50,0000  10,0000 2018-01-19 19:57:57.097
3   1     130,0000  40,0000 2018-01-20 19:58:13.660
5   2      44,0000   2,0000 2018-01-21 11:11:00.000
如何从3-5行中获取所有日期为2018-01-21或2018-01-21的行,以及其上一行关于FKId 1和2的行


谢谢

在大多数数据库中,您可以使用ANSI标准lead函数:

select t.*
from (select t.*, lead(date) over (partition by fkid order by date) as next_date
      from t
     ) t
where date in ('2018-01-20', '2018-01-21') or
      next_date in ('2018-01-20', '2018-01-21');
或者,如果您只需要日期大于某个日期的所有记录和上一条记录,则此逻辑也适用:

select t.*
from t
where t.date >= (select max(t2.date)
                 from t t2
                 where t2.fkid = t.fkid and t2.date < '2018-01-20'
                );

到目前为止,您尝试了什么?您正在使用哪些RDBMS?MySQL,SQL Server,Oracle???是SQL Server,MySQL,Oracle吗?另外,请为示例添加预期输出所有日期为2018-01-21或2018-01-21的都是相同的日期。