我有一个表,我想用以前的值按日期顺序填充空值,但也有一个组,例如:表十:
| 日期|集团|价值|
| - ------|- ------|- ------|
| 2023年1月1日|A类|零|
| 二〇二三年二月一日|A类|凯文|
| 2023年3月1日|A类|零|
| 2023年4月1日|A类|汤姆|
| 2023年5月1日|A类|零|
| 2023年6月1日|A类|零|
| 2023年1月1日|乙|萨拉|
| 二〇二三年二月一日|乙|零|
所以我想按组列分组并填充值列的空值,组可以是多值的,每个组的日期是唯一的。我想得到这样的结果:
| 日期|集团|价值|
| - ------|- ------|- ------|
| 2023年1月1日|A类|零|
| 二〇二三年二月一日|A类|凯文|
| 2023年3月1日|A类|凯文|
| 2023年4月1日|A类|汤姆|
| 2023年5月1日|A类|汤姆|
| 2023年6月1日|A类|汤姆|
| 2023年1月1日|乙|萨拉|
| 二〇二三年二月一日|乙|萨拉|
在postgresql里怎么做?请帮帮我
我试过了,但我真的不知道该怎么做。我也是个新手
2条答案
按热度按时间r6vfmomb1#
如果你可以有一个以上的NULL值连续,
LAG
函数将不会帮助你太多。一个通用的解决方案将用途:COUNT
窗函数用于生成一个非空值和连续空值的划分MAX
窗口用于重新分配空值。检查here演示。
bis0qfac2#
如果输入数据总是这种形式,我们可以使用
GREATEST
和LAG
:使用示例数据在此处进行尝试:db<>fiddle
GREATEST
获取两个(或多个)值中的最高值,即NOT NULL
,LAG
从前一行中选择值。如果由于输入数据可能更复杂而导致这在您的场景中不够充分,请编辑您的问题以添加应涵盖的其他情况。
在这个答案中,通过添加一个x来重命名列,因为原始名称是SQL关键字,应该尽可能避免。