如果 MySQL 当天的数据不可用,则获取最新数据

Getting most recent data if data for the day is not available with MySQL

我有一个大型 SQL 查询 (MySQL 5.7.32),它获取各种数据并且包含特定日期的定价数据(如果这一天有可用的价格数据) .通过简单的 LEFT JOIN 完成:

SELECT *
FROM merchants m CROSS JOIN products p
LEFT JOIN prices mps
    ON m.id = mps.id AND p.article_id = mps.article_id AND mps.DATE = $date

在某些情况下,这一天没有价格。在那种情况下,我想获得最新的可用价格。

这是否可以通过 LEFT JOIN 实现,或者我是否必须为我的语句添加更多的复杂性?

有可能

SELECT m.*, t.*
FROM merchants m
JOIN (
    SELECT MAX(`date`) as max_date, id
    FROM prices
    WHERE `date` <= ?
    GROUP BY id
) t ON t.id = m.id

编辑:2 步查询

假设您的商店每页显示 20 件产品。您可以 运行 像这样的第一个查询:

SELECT m.*
FROM merchants m
WHERE some_criterias
LIMIT 20 OFFSET 0

然后将第一个查询的结果传递给第二个查询:

SELECT m.*, t.*
FROM merchants m
JOIN (
    SELECT MAX(`date`) as max_date, p.merchant_id
    FROM prices p
    AND merchant_id IN (?, ?, ?...)
    WHERE `date` <= ?
    GROUP BY id
) t ON t.merchant_id = m.id