php – 最近日期(今天,昨天或之前)的Mysql查询内部联接

我正试图从内部联接的表中提取最新的定价数据.价格全天更新,但无需在午夜更新.

当数据在当天结束时更新时,以下查询非常有用.但是,如果今天的数据是空白的,我如何得到昨天的数据呢?

我正在索引一个格式如此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

为了清楚起见,我希望它检查该项目的最新记录.无论是今天,昨天还是之前.

SQLFiddle1

以下查询为我提供了所需的结果,但使用我的生产数据集返回结果需要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

SQLFiddle2

解决方法:

这应该有效:

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%'

我不知道这是否需要大量的执行时间.请尝试一下,因为您的表中可能有更多数据,这将是查看查询执行时间的一个很好的测试.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...