这几天我一直在绕这个问题,这让我抓狂。我已经使用 max(date) 和左连接找到了部分答案,但尚未达到正确的结果,因此将非常感谢您的帮助。
我有 3 张 table :-
inventory
id
lots of other fields...sale_price
id
date
*ticket_type_id
*inventory_idticket_type
id
ticket_name
每次促销价格更改时,sale_price 表都会更新日期和新的门票类型。我想做的就是显示:-
- 查找 sale_price 中的最新记录
- 显示与此相关的库存信息
- 显示与此相关的ticket_name
我得到的查询是:-
$result = "
SELECT DISTINCT inv.*, tt.ticket_name, MAX(sp.date) AS spdate
FROM sale_price sp
LEFT
JOIN ticket_type tt
ON sp.ticket_type_id = tt.id
JOIN inventory inv
ON sp.inventory_id = inv.id
GROUP
BY sp.inventory_id
";
但它显然不起作用。我真的很感激您能提供的任何帮助,以及(如果不是太多的话)我出错的地方的一些细节。
非常感谢您的期待!
最佳答案
如果您只想知道所有记录的最新记录,那么您可以使用以下查询:
SELECT
s.ticket_type_id,
s.inventory_id,
t.ticket_name,
i.lots of other fields
FROM
sale_price s
INNER JOIN
inventory i
ON
s.inventory_id = i.id
INNER JOIN
ticket_type t
ON
s.ticket_type_id = t.id;
WHERE
s.date = (
SELECT
MAX(s1.date)
FROM
sale_price s1
)
如果您需要每个库存项目的最新记录,那么您必须通过在子查询的 WHERE
子句中使用 inventory_id 的相等性来扩展此查询:
SELECT
s.ticket_type_id,
s.inventory_id,
t.ticket_name,
i.lots of other fields
FROM
sale_price s
INNER JOIN
inventory i
ON
s.inventory_id = i.id
INNER JOIN
ticket_type t
ON
s.ticket_type_id = t.id;
WHERE
-- gives us the newest date per inventory_id
s.date = (
SELECT
MAX(s1.date)
FROM
sale_price s1
WHERE
s.inventory_id = s1.inventory_id
)
顺便说一下,这是一个相关子查询,它可能会变慢。
关于mysql - 3 个连接的 mysql 表的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586664/