lag(servertime,1,null)over(partition by userlable,indate order by servertime)
时间: 2023-07-19 08:35:16 浏览: 69
Oracle查询中OVER (PARTITION BY ..)用法
5星 · 资源好评率100%
这是一个使用LAG() OVER()函数的示例,用于计算每个用户在每个日期上的上一次的servertime值。具体来说,这个查询将结果按照userlabel和indate分组,然后按照servertime升序排序。函数LAG() OVER()用于计算前一行的servertime值,偏移量为1,如果前一行不存在(例如,当前行是分组中的第一行),则返回null。这样可以得到每个用户在每个日期上的上一次servertime值。
例如,假设有以下数据:
```
userlabel | indate | servertime
-------------------------------------
user1 | 2021-01-01 | 10:00:00
user1 | 2021-01-01 | 11:00:00
user1 | 2021-01-02 | 09:00:00
user2 | 2021-01-01 | 08:00:00
user2 | 2021-01-01 | 09:00:00
user2 | 2021-01-02 | 10:00:00
```
用以下查询:
```
SELECT userlabel, indate, servertime, LAG(servertime, 1, null) OVER(PARTITION BY userlabel, indate ORDER BY servertime) AS prev_servertime
FROM mytable
```
将得到以下结果:
```
userlabel | indate | servertime | prev_servertime
-----------------------------------------------------
user1 | 2021-01-01 | 10:00:00 | null
user1 | 2021-01-01 | 11:00:00 | 10:00:00
user1 | 2021-01-02 | 09:00:00 | 11:00:00
user2 | 2021-01-01 | 08:00:00 | null
user2 | 2021-01-01 | 09:00:00 | 08:00:00
user2 | 2021-01-02 | 10:00:00 | 09:00:00
```
可以看到,对于每个用户和日期组合,查询结果都计算了前一次的servertime值。例如,第一行的prev_servertime为null,因为当前行是分组中的第一行。第二行的prev_servertime为10:00:00,因为这是user1在2021-01-01上的上一次servertime值。
阅读全文