【问题标题】:Reverse order in partitions分区中的逆序
【发布时间】:2020-11-25 16:03:30
【问题描述】:

我有这个问题

select
*,
row_number() over w,
sum(satisfied::integer) over w,
round(avg(satisfied::integer) over w, 3)*10
from compositions_rating
window w as (partition by user_id order by rating_date asc)

这给了我这个(占据了 user_id = 1 的部分分区)

但我也想像这样在分区中进行倒序查询

这可能是个愚蠢的问题,但我该怎么做呢?

更新: 我最好的尝试是这个

select
*,
row_number() over w,
sum(satisfied::integer) over w,
round(avg(satisfied::integer) over w, 3)*10
from compositions_rating
window w as (partition by user_id order by rating_date desc rows between current row and UNBOUNDED following)

但在这种情况下,行号按正常顺序排列,因为它们应该是

UPD2: 如果在分区后订购,您会得到什么

【问题讨论】:

  • 添加一个最终的order by rating_date desc?
  • 我看错了你的消息,然后一切都搞砸了(之后分区被破坏了)
  • 应该是order by user_id, rating_date desc

标签: sql postgresql window-functions partitioning


【解决方案1】:

对我来说,您似乎已经有了预期的结果,但只是想在之后更改完整的订单......那么,这不是解决了您的问题吗?

SELECT
    *
FROM (
   -- <your query>
) s
ORDER BY user_id, rating_date DESC

【讨论】:

  • 做这样的事情会破坏分区,所有行都只是按 rating_date 排序。我将在我的帖子中添加屏幕截图
  • @wmdanor 这个 ORDER BY 子句放在查询的末尾,而不是放在 OVER 子句中,它不会影响分区。它会影响您获得的行的顺序。
  • 嗨,看看一些真正的可复制样本数据会更有帮助。最好的方法是创建一个像这里一样的小提琴dbfiddle.uk/…
  • @S-Man 正在处理中
  • 只需将user_id 添加到最终的ORDER BY
猜你喜欢
  • 1970-01-01
  • 2013-11-04
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
相关资源
最近更新 更多