mysql - 如果当天的数据不适用于 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
推荐阅读
- python - Python中传统线程和异步线程如何通信?
- sql - SQL查询从集合中返回表中不存在的值(括号)
- regex - 包含一系列值并使用该范围进行计算的单元格
- woocommerce - Woocommerce 订阅手动付款
- vue.js - 我的 html 代码无法访问我的 vue 组件
- c# - SQLDataReader。ExecuteReader 超时
- c# - 多个对象的刚体
- java - 如何将二维字符串数组从 java 代码传递到 play 框架中的 scala.html?
- r - geom_density_2d 中的轮廓太紧
- spartacus-storefront - 是否建议使用 TypeScript 为 Spartacus 店面编写 Angular 的东西?