我有以下数据,例如
id product_id date
------ ---------- ----
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 2
7 3 1
我想要的结果数据查询"每个product_id上的最后日期的最后一条记录"
得到结果我使用下面的查询
SELECT a.* FROM test AS a
JOIN (SELECT MAX(id) AS id, product_id, MAX(DATE) AS DATE FROM test GROUP BY product_id) AS b
ON a.id = b.id AND a.product_id = b.product_id AND a.date = b.date
这次我得到了我想要的结果
id product_id date
------ ---------- --------
3 1 3
6 2 2
7 3 1
我在添加其他数据时的问题
id product_id date
------ ---------- --------
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 2 2
7 3 1
8 1 3
9 1 2
并使用相同的查询,结果就像这样
id product_id date
------ ---------- --------
6 2 2
7 3 1
其中值' 1' for product_id?
答案 0 :(得分:1)
试试这个
SELECT id, product_id, DATE FROM test sitem WHERE product_id IN (1,2,3) AND DATE = (SELECT DATE FROM test WHERE product_id =
sitem.product_id ORDER BY DATE DESC LIMIT 1) AND id =
(SELECT id FROM test WHERE product_id = sitem.product_id ORDER BY DATE DESC,
id DESC LIMIT 1) GROUP BY product_id
答案 1 :(得分:0)
这是你的子查询:
SELECT MAX(id) AS id, product_id, MAX(DATE) AS DATE
FROM test
GROUP BY product_id
它独立计算id
和date
的最大值。但是,不能保证这两个值在同一记录中。有一些方法可以修复子查询,但它们相当复杂。
相反,我建议使用另一种方法来获取最后一条记录:
SELECT t.*
FROM test t
WHERE NOT EXISTS (SELECT 1
FROM test t2
WHERE t2.product_id = t.product_id AND
(t2.date > t.date OR
t2.date = t.date AND t2.id > t.id
);
这将每个产品的最后一条记录标识为没有其他记录具有更大日期的记录。并且,如果两个记录具有相同的日期,则没有其他记录具有更大的ID。