我仍然在为这个问题而苦苦挣扎(我以前的帖子就是关于这个问题的,并且由于我已经更改了表参数,所以我遇到了另一个问题):
(某些列已更改,因此是一个不同的问题/问题,因为我只有id作为字段来获取最后一个插入内容)
餐桌产品:
id name
1 TV
2 RADIO
3 COMPUTER
表销售(product_id是指产品的FK):
id_sales feedback product_id
4 GOOD 2
5 GOOD 3
6 NICE 3
我正在使用的查询:
SELECT products.name, sl.feed
FROM products LEFT JOIN (
SELECT product_id, max(id_sales), feedback AS feed FROM sales GROUP BY product_id) sl
ON products.id = sl.product_id
结果是:
name feed
TV NULL
RADIO GOOD
COMPUTER GOOD
它适用于电视和广播,但是在“计算机”列中,我必须显示LAST反馈,您可以看到它是“ NICE”,而不是“ GOOD”!以某种方式使用SQL函数MAX(id_sales)不是我认为的解决方案。 我在这里想念什么?
答案 0 :(得分:1)
最好的方法是row_number()
,但这可能不可用。因此,您可以在ON
子句中过滤最近的日期:
SELECT p.name, sl.feed
FROM products p LEFT JOIN
sales s
ON p.id = s.product_id AND
s.id_sales = (SELECT MAX(s2.id_sales) FROM sales s2 WHERE s2.product_id = s.product_id);
还有其他表达这种逻辑的方法。这种方法的一大优势在于,它可以最大程度地利用索引来提高性能。
答案 1 :(得分:0)
SELECT products.name, sl.feed
FROM products LEFT JOIN (
SELECT product_id, rank() over (partition by product_id Order by id_Sales desc) pRank, feedback AS feed FROM sales ) sl
ON products.id = sl.product_id where sl.pRank = 1
这对您有用吗?
答案 2 :(得分:0)
使用子查询并左联接
material