【问题标题】:How do I select each row from a table, ordering them by the most "recent (timestamp)" associated row in join table?如何从表中选择每一行,并按联接表中最近的“最近(时间戳)”关联行对它们进行排序?
【发布时间】:2019-02-28 09:59:17
【问题描述】:

我有一张quotes 的桌子。每个报价都可以得到feedbacks(报价有很多反馈)。

我想选择 * 引号(当然是不同的),按反馈表中最近的 submitted_at 日期降序排列,每个引号:

https://www.db-fiddle.com/f/pHTQzkWMYND8CGJcAiu2JC/3

我玩过PARTITION-clause,但没有成功。

db-fiddle 示例中查询的预期结果是:

3   2017-03-24T00:00:00.000Z    Cata
1   2017-01-02T00:00:00.000Z    Radu
4   2017-04-20T00:00:00.000Z    David

【问题讨论】:

    标签: sql postgresql greatest-n-per-group


    【解决方案1】:

    您可以使用以下解决方案:

    SELECT quotes.id, f.submitted_at, buyer_name
    FROM quotes INNER JOIN (
        SELECT quote_id, MAX(submitted_at) AS submitted_at 
        FROM feedbacks 
        GROUP BY quote_id
    ) f ON quotes.id = f.quote_id
    ORDER BY f.submitted_at DESC
    

    演示: https://www.db-fiddle.com/f/pHTQzkWMYND8CGJcAiu2JC/4

    【讨论】:

      【解决方案2】:

      您不必使用子查询,您的预期结果是直截了当的。

      SELECT
      quotes.ID,max(feedbacks.submitted_at) as submitted_at,buyer_name
      FROM quotes 
      INNER JOIN feedbacks
      ON quotes.id = feedbacks.quote_id
      group by quotes.ID,buyer_name
      

      【讨论】:

        【解决方案3】:

        小提琴链接已更改,因此您需要在下方使用row_number()

        select q.id,f.submitted_at, q.buyer_name from 
        (
         select *,row_number()over(partition by quote_id order by submitted_at desc) rn
        from feedbacks 
        ) f
        join  quotes q on f.quote_id=q.id
        where f.rn=1
        

        demo link

        id  submitted_at                buyer_name
        1   2017-03-20T00:00:00.000Z    Radu
        3   2017-04-25T00:00:00.000Z    Cata
        4   2017-01-10T00:00:00.000Z    David
        

        【讨论】:

        • 在这种情况下我们真的需要分区吗,为什么我们不能直接连接两个表并从反馈中获取最大日期?
        • @AjanBalakumaran 这是另一种方法
        猜你喜欢
        • 2011-06-25
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2019-08-09
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多