Oracle SQL中的第一个和最后一个值

Oracle SQL中的第一个和最后一个值,sql,oracle,window-functions,Sql,Oracle,Window Functions,我在查询某些数据时遇到问题。我试图从中提取数据的表是一个日志表,我希望在下面的示例中看到相邻值的变化 表: +-----------+----+-------------+----------+------------+ | UNIQUE_ID | ID | NAME | CITY | DATE | +-----------+----+-------------+----------+------------+ | xa220 | 1 | John S

我在查询某些数据时遇到问题。我试图从中提取数据的表是一个日志表,我希望在下面的示例中看到相邻值的变化

表:

+-----------+----+-------------+----------+------------+ | UNIQUE_ID | ID | NAME | CITY | DATE | +-----------+----+-------------+----------+------------+ | xa220 | 1 | John Smith | Berlin | 2020.05.01 | | xa195 | 1 | John Smith | Berlin | 2020.03.01 | | xa111 | 1 | John Smith | München | 2020.01.01 | | xa106 | 2 | James Brown | Atlanta | 2018.04.04 | | xa100 | 2 | James Brown | Boston | 2017.12.10 | | xa76 | 3 | Emily Wolf | Shanghai | 2016.11.03 | | xa20 | 3 | Emily Wolf | Shanghai | 2016.07.03 | | xa15 | 3 | Emily Wolf | Tokyo | 2014.02.22 | | xa12 | 3 | Emily Wolf | null | 2014.02.22 | +-----------+----+-------------+----------+------------+ 预期结果:

+----+-------------+----------+---------------+ | ID | NAME | CITY | PREVIOUS_CITY | +----+-------------+----------+---------------+ | 1 | John Smith | Berlin | München | | 2 | James Brown | Atlanta | Boston | | 3 | Emily Wolf | Shanghai | Tokyo | | 3 | Emily Wolf | Tokyo | null | +----+-------------+----------+---------------+ 我一直试图使用第一个和最后一个值,但是,无法获得预期的结果

select distinct id, name, city, first_value(city) over (partition by id order by city) as previous_city from test 感谢您的帮助! 谢谢大家!

使用滞后函数获取上一日期的城市,并仅显示当前城市与滞后结果不同的行:

以cte为例 选择t.*,LAGCITY,1,按ID划分的城市顺序,按日期滞后城市 从你的桌子上 选择ID、名称、城市、滞后城市作为上一个城市 来自cte 哪里 城市滞后或 城市为空且滞后城市不为空或 城市不为空,滞后城市为空 订购人 ID,日期描述; 关于如何使用滞后及其检查值的一些评论是有保证的。我们在这里使用三参数版本的LAG。第二个参数表示要回溯的记录数,在本例中,默认值为1。第三个参数意味着如果每个ID分区的给定记录是第一个,则使用的默认值。在这种情况下,我们使用默认值作为相同的城市值。这意味着第一条记录永远不会出现在结果集中

对于上面的WHERE子句,匹配记录是城市和滞后城市不同的记录,或者是其中一个为NULL,另一个不为NULL的记录。这是将空城市和一些非空城市值视为不同的逻辑。

使用滞后函数获取前一日期的城市,只保留当前城市和滞后结果不同的行