我已经围绕这个问题进行了几天的讨论,这让我疯狂。我已经使用max(date)和left join找到了部分答案,但是还没有达到正确的结果,所以非常感谢任何帮助。
我有3张桌子: -
库存
id
很多其他领域......SALE_PRICE
ID
日期
* ticket_type_id
* inventory_id
ticket_type
ID
ticket_name
每次更改销售价格时,sales_price表格都会更新日期和新的故障单类型。我想做的就是显示: -
我到达的查询是: -
$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
";
但它显然无法正常工作。我真的很感激你能给予的任何帮助,并且(如果它不是太多)我会在哪里出错了。
非常感谢期待!答案 0 :(得分:0)
如果您只想知道所有的最新记录,那么您可以使用以下查询:
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
)
顺便说一句,这是一个相关的子查询,它可能会变慢。