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的都是相同的日期。