有什么方法可以强制PostgreSQLLAG()
和LEAD()
函数使用 同一分区中的 值而不是前行的值?
---------------------------------------------------
| client_id | order_id | product_id | year | rank |
---------------------------------------------------
| 1 | 1 | 111345 | 1995 | 1 |
| 1 | 1 | 912346 | 1995 | 1 |
| 1 | 1 | 212346 | 1995 | 1 |
| 1 | 2 | 233368 | 1998 | 4 |
| 1 | 2 | 133368 | 1998 | 4 |
| 1 | 3 | 412341 | 2005 | 6 |
| 2 | 55 | 312344 | 1995 | 1 |
| 2 | 57 | 812343 | 1999 | 2 |
---------------------------------------------------
预期结果将是:
---------------------------------------------------------------------------
| client_id | order_id | product_id | year | rank | prev_year | next_year |
---------------------------------------------------------------------------
| 1 | 1 | 111345 | 1995 | 1 | null | 1998 |
| 1 | 1 | 912346 | 1995 | 1 | null | 1998 |
| 1 | 1 | 212346 | 1995 | 1 | null | 1998 |
| 1 | 2 | 233368 | 1998 | 4 | 1995 | 2005 |
| 1 | 2 | 133368 | 1998 | 4 | 1995 | 2005 |
| 1 | 3 | 412341 | 2005 | 6 | 1998 | null |
| 2 | 55 | 312344 | 1995 | 1 | null | 1999 |
| 2 | 57 | 812343 | 1999 | 2 | 1995 | null |
---------------------------------------------------------------------------
如果是在给定等级中year
具有 不同 值的情况,则prev_year
并且next_year
可以是这些值中的任何一个。例如:
---------------------------------------------------------------------------
| client_id | order_id | product_id | year | rank | prev_year | next_year |
---------------------------------------------------------------------------
| 1 | 1 | 111345 | 1994 | 1 | null | 1998 |
| 1 | 1 | 912346 | 1995 | 1 | null | 1998 |
| 1 | 1 | 212346 | 1996 | 1 | null | 1998 |
| 1 | 2 | 233368 | 1998 | 4 | ???? | null |
????
可以等于1994、1995或1996
您应该在数据集上使用lag()
和lead()
函数,每对减少到一行(client_id, rank)
:
select
client_id, order_id, product_id,
t.year, rank, prev_year, next_year
from my_table t
join (
select distinct on (client_id, rank)
client_id, rank, year,
lag(year) over w as prev_year,
lead(year) over w as next_year
from my_table
window w as (partition by client_id order by rank)
order by 1, 2, 3 desc
) s using (client_id, rank)
order by client_id, rank
client_id | order_id | product_id | year | rank | prev_year | next_year
-----------+----------+------------+------+------+-----------+-----------
1 | 1 | 212346 | 1995 | 1 | | 1998
1 | 1 | 912346 | 1995 | 1 | | 1998
1 | 1 | 111345 | 1995 | 1 | | 1998
1 | 2 | 133368 | 1998 | 4 | 1995 | 2005
1 | 2 | 233368 | 1998 | 4 | 1995 | 2005
1 | 3 | 412341 | 2005 | 6 | 1998 |
2 | 55 | 312344 | 1995 | 1 | | 1999
2 | 57 | 812343 | 1999 | 2 | 1995 |
(8 rows)
问题内容: 首先,我是熊猫的新手,但我已经爱上了它。我正在尝试实现与Oracle的滞后功能等效的功能。 假设您有以下DataFrame: 如果这是一个oracle数据库,而我想创建一个按“ Group”列分组并按Date排序的滞后函数,则可以轻松使用此函数: 这将产生下表: 在大熊猫中,我可以将日期设置为索引并使用shift方法: 唯一的问题是,这不会按列分组。即使将日期和组这两列设置为索引,我仍
描述 (Description) 与普通文本相比,它是相当大的文本块,可用于广告或其他描述性文本。 例子 (Example) 以下示例演示了在Foundation中使用lead paragraph 。 <!doctype html> <html> <head> <title>Lead Paragraph</title> <link rel = "stylesheet"
本文向大家介绍说一下 MyBatis 的一级缓存和二级缓存?相关面试题,主要包含被问及说一下 MyBatis 的一级缓存和二级缓存?时的应答技巧和注意事项,需要的朋友参考一下 一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,它的声明周期是和 SQLSession 一致的,有多个 SQLSession 或者分布式的环境中数据库操作,可能会出现脏数据。当 Session f
问题内容: 我正在尝试使用SQL Server 2012 LAG函数编写查询,以从我的[Order]表中检索数据,其中行与上一行之间的日期时间差小于等于2分钟。 我期望的结果是 但我看到了 最后一行不应该返回。这是我尝试过的:SQL Fiddle 任何有想法的人吗? 问题答案: 好吧,首先,我添加了一行以向您显示其他人的答案不起作用的地方,但他们现在将其删除了。 现在针对我查询中的逻辑。您说过您希
我正在研究一个体育项目的投影模型,我需要了解某支球队最近的比赛: < li >他们的下一个对手是谁?(已解决) < li >他们的下一个对手是什么时候? 可以在下面使用的reprex。以第1行为例,我需要理解“a”的下一个对手“e”的最近一场比赛是game_id_3。 如果我能提供更多细节,请告诉我。
一级缓存是session级别的缓存,默认开启,当查询一次数据库时,对查询结果进行缓存,如果之后的查询在一级缓存中存在,则无需再访问数据库; 二级缓存是sessionFactory级别的缓存,需要配置才会开启。当进行sql语句查询时,先查看一级缓存,如果不存在,访问二级缓存,降低数据库访问压力。