我正试图从内部联接的表中提取最新的定价数据.价格全天更新,但无需在午夜更新.
当数据在当天结束时更新时,以下查询非常有用.但是,如果今天的数据是空白的,我如何得到昨天的数据呢?
我正在索引一个格式如此date_itemnumber =>的列. 2015-05-22_12341234
SELECT h.*, collection.*, history.price
FROM collection
INNER JOIN h ON collection.itemid=h.id
INNER JOIN history ON collection.itemid=history.itemid
AND concat('2015-05-23_',collection.itemid)=history.date_itemid
WHERE h.description LIKE '%Awesome%'
Production Query time: .046 sec
为了清楚起见,我希望它检查该项目的最新记录.无论是今天,昨天还是之前.
以下查询为我提供了所需的结果,但使用我的生产数据集返回结果需要3分钟以上.随着我的数据集变大,需要更长的时间.所以这不是最有效的方法.
SELECT h.*, collection.*, history.price
FROM collection
INNER JOIN h ON collection.itemid=h.id
INNER JOIN history ON collection.itemid=history.itemid
AND (select history.date_itemid from history WHERE itemid=collection.itemid GROUP BY date_itemid DESC LIMIT 1)=history.date_itemid
WHERE h.description LIKE '%Awesome%'
Production Query time: 181.140 sec
解决方法:
这应该有效:
SELECT h.*, collection.*, history.price
FROM collection
INNER JOIN h ON collection.itemid=h.id
INNER JOIN(
SELECT a.*
FROM history a
INNER JOIN
( SELECT itemid,MAX(date_itemid) max_date_itemid
FROM history
GROUP BY itemid
) b ON b.itemid = a.itemid AND b.max_date_itemid = a.date_itemid
) AS history ON history.itemid = collection.itemid
WHERE h.description LIKE '%Awesome%'