表会定期更新(递增load_id)。如何选择
*对于列名称中的每个值
*列中的最后两个值count
- 其中last由max(load_id)per day给出
- 然后把它们并排放
输入
name,day,count,load_id
John,10,9,14
John,9,5,12
John,9,7,13
John,8,5,12
John,8,2,11
Paul,9,0,12
Paul,9,1,13
Paul,7,1,11
Paul,7,9,10
Mark,7,10,11
Mark,7,11,10
Ned,7,0,10
第1步-每天的最后记录
name,day,count
John,10,9
John,9,7
John,8,5
Paul,9,1
Paul,7,1
Mark,7,10
Ned,7,0
输出
name,last_day_last_count,prev_day_last_count
John,9,7
Paul,1,1
Mark,10,NULL
Ned,0,NULL
尝试
WITH RankedData AS (
SELECT
name,
day,
count,
load_id,
ROW_NUMBER() OVER (PARTITION BY name, day ORDER BY load_id DESC) AS rn
FROM test
)
SELECT *
FROM RankedData
WHERE rn = 1
ORDER BY name, day DESC
1条答案
按热度按时间7jmck4yq1#
按
name
和day
聚合分组,以找到MAX
最大值load_id
和相应的count
,然后使用ROW_NUMBER
对每个人的行进行编号,以DESC
结尾load_id
,最后PIVOT
获得最新的2个值作为列,而不是行:或者在两个过程中使用
ROW_NUMBER
:对于样本数据,两者都输出:
| 名称|最后一天|前一天|
| --|--|--|
| 约翰| 9 | 7 |
| 马克| 10 |* 空 |
| 奈德| 0 | 空 *|
| 保罗| 1 | 1 |
要获得相应的
load_id
s:或
两者输出:
| 名称|最后一天|LAST_DAY_LOAD_ID|前一天|前一天装载ID|
| --|--|--|--|--|
| 约翰| 9 | 14 | 7 | 13 |
| 马克| 10 | 11 |* 空 | 空 |
| 奈德| 0 | 10 | 空 | 空 *|
| 保罗| 1 | 13 | 1 | 11 |
fiddle