我有两个表:
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。
最佳答案
使用 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
- 加入两个表(
products LEFT JOIN review
或review RIGHT JOIN products
)。 - 现在您必须执行您的命令。首先,您要将产品组合在一起。然后,您想要获取每个产品的最新条目(日期按降序排列以获得最新的作为第一行)。
DISTINCT ON
始终过滤有序组的第一行。因此,您可以获得每个产品的最新条目。- 要对产品行进行排序,请将 1-3 放入子查询中,然后按
price
进行排序。
关于sql - 在 Postgresql 中加入最大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368981/