微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐