sql - 在 Postgresql 中加入最大记录

标签 sql ruby-on-rails database postgresql ruby-on-rails-5

我有两个表:

products
+----+--------+
| id | name   |
+----+--------+
| 1  | Orange |
| 2  | Juice  |
| 3  | Fance  |
+----+--------+
reviews
+----+------------+-------+------------+
| id | created_at | price | product_id |
+----+------------+-------+------------+
| 1  | 12/12/20   | 2     | 1          |
| 2  | 12/14/20   | 4     | 1          |
| 3  | 12/15/20   | 5     | 2          |
+----+------------+-------+------------+

如何获取按最近(最大创建时间)评论的价格订购的产品列表?

+------------+--------+-----------+-------+
| product_id | name   | review_id | price |
+------------+--------+-----------+-------+
| 2          | Juice  | 3         | 5     |
| 1          | Orance | 2         | 4     |
| 3          | Fance  |           |       |
+------------+--------+-----------+-------+

我使用最新的 PostgreSQL。

最佳答案

demo:db<>fiddle

使用 DISTINCT ON

SELECT
    *
FROM (
    SELECT DISTINCT ON (p.id)
        p.id,
        p.name,
        r.id as review_id,
        r.price
    FROM
        reviews r
    RIGHT JOIN products p ON r.product_id = p.id
    ORDER BY p.id, r.created_at DESC NULLS LAST
) s
ORDER BY price DESC NULLS LAST
  1. 加入两个表(products LEFT JOIN reviewreview RIGHT JOIN products)。
  2. 现在您必须执行您的命令。首先,您要将产品组合在一起。然后,您想要获取每个产品的最新条目(日期按降序排列以获得最新的作为第一行)。
  3. DISTINCT ON 始终过滤有序组的第一行。因此,您可以获得每个产品的最新条目。
  4. 要对产品行进行排序,请将 1-3 放入子查询中,然后按 price 进行排序。

关于sql - 在 Postgresql 中加入最大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368981/

相关文章:

ruby-on-rails - "bundler: command not found: thin"heroku 部署 rails

ruby-on-rails - Rails 一直告诉我它当前未安装

ios - 使用 swift 3 在 Firebase 数据库上进行简单搜索

java - 使用单个 "update"JButton 将测试表的 auto_increment 值插入到分数表表中

mysql - 显示错误页面 : Application Instantiation Error. 时出错 .. 数据库问题 i thnik(详细信息 : wamp, joomla)

来自不同html页面的PHP连接

sql - 如何在 SQL 的特定行中找到最少的非空列?

ruby-on-rails - Rails - 从一个模型在另一个模型中创建实例

mysql - 2个不同实体的评论系统

sql - 用户定义的 SQL 数据类型使用得很多吗?