【问题标题】:recover the value above in postgres在 postgres 中恢复上述值
【发布时间】:2018-06-28 17:11:50
【问题描述】:

我想按名称恢复上面的值。

见表。

我希望在最后一个 number_week 之前的列中得到类似的结果。

谢谢

【问题讨论】:

  • 我不明白计算此列的逻辑。你是怎么得出这些数字的? 哦等等……我明白了。如果您对此进行解释,将来会有所帮助,因为它不是很明显(需要前一周的 week_number,如果 name 没有前一周,则需要当前周)。
  • 我不想计算。示例:对于本周,我想获取过去一周的编号。第一周的编号 = 1 并且名称 = A 所以在最后一个 number_week 之前的列中我输入了值 1。但是第二个第一周 = 2 并且名称 = A 所以在最后一个 number_week 之前的列中我输入了值 1 . 对不起,我很难解释它

标签: sql postgresql data-partitioning


【解决方案1】:

这样的事情应该可以工作:

SELECT number_week,
  name,
  LAG(number_week, 1, number_week) OVER (PARTITION BY name ORDER BY number_week) as before_last_number_week
FROM t1;

sqlfiddle version

这利用了Lag() 窗口函数。 “窗口”是一组可以选择排序的记录。在这里,我们按Name(所以两个组/窗口)对记录进行分组,并按week_number 对它们进行排序。然后使用Lag() 我们选择之前记录的week_number(在那个窗口中)。 Lag()可以取默认值,所以我们指定默认为当前记录的week_number

【讨论】:

  • @a_horse_with_no_name 这很漂亮。我更新了答案。谢谢!!!我想我应该在那个上使用 RTFM。
  • 这正是我想要的。它完美地工作。非常感谢
猜你喜欢
  • 1970-01-01
  • 2020-07-23
  • 2023-02-21
  • 2017-08-17
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2019-05-14
  • 2015-10-21
相关资源
最近更新 更多