【发布时间】:2018-07-17 05:30:11
【问题描述】:
我的数据库中有以下 2 个表:
产品价格
CREATE TABLE `product_price` (
`asin` varchar(10) NOT NULL,
`date` date NOT NULL,
`price` decimal(7,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`asin`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
产品信息
CREATE TABLE `product_info` (
`asin` varchar(10) NOT NULL,
`name` varchar(200) DEFAULT NULL,
`brand` varchar(50) DEFAULT NULL,
`part_number` varchar(50) DEFAULT NULL,
`url` text,
`image` text,
PRIMARY KEY (`asin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我想查找在开始日期和结束日期之间降价的产品。
我现在正在使用以下有效的查询:
$query = "SELECT pi.*, prev.price AS 'old_price', curr.price, ROUND((100.0*(curr.price - prev.price) / prev.price),0) As PercentDiff FROM product_price As curr
JOIN product_price As prev ON curr.date = '".$end_date."' AND prev.date = '".$start_date."'
JOIN product_info pi ON curr.asin = pi.asin WHERE curr.asin = prev.asin HAVING PercentDiff < 0 ORDER BY PercentDiff";
但问题是如果价格没有变化,表product_price没有记录。
例如
asin date price
AAAAAAAAA 2018-07-17 7
AAAAAAAAA 2018-07-15 6
start_date="2018-07-16" end_date="2018-07-17"
我希望它在价格降低时出现在我的结果中。
我必须如何更改我的查询??
我尝试将 prev.date = '".$start_date."' 更改为 prev.date
但返回所有记录,而不是我想要的最接近的记录。
这是来自 product_price 的一些示例数据:
+------------+------------+--------+
| asin | date | price |
+------------+------------+--------+
| B000GBKDB4 | 2018-07-02 | 38.66 |
| B000GBKDCI | 2018-07-02 | 72.98 |
| B000GBKFLW | 2018-07-02 | 33.27 |
| B000GBKFMG | 2018-07-02 | 63.45 |
| B000GBLZEI | 2018-07-02 | 34.90 |
| B000GBLZEI | 2018-07-04 | 21.31 |
| B000GBLZEI | 2018-07-05 | 20.24 |
| B000GBLZEI | 2018-07-06 | 18.41 |
| B000GBLZEI | 2018-07-08 | 17.49 |
| B000GBLZEI | 2018-07-09 | 15.79 |
| B000GBLZEI | 2018-07-11 | 14.84 |
| B000GBLZEI | 2018-07-16 | 14.29 |
【问题讨论】:
-
如果你把一些样本数据和你需要的结果放在一个表格中会有所帮助
-
我从 product_price 表中添加了一些数据。因此,在我的示例数据中,当开始日期为 2018-07-15 和 2018-07-16 时,asin B000GBLZEI 必须显示从 2018-07-11 到 2018-07-16 的价格下降但是我提供的查询只会当您设置开始日期 = 2018-07-11 和结束日期 2018-07-16 时显示
-
价格可以在期间下跌然后回升吗?如果是这样,你想做什么?你真的是说你想要那些最后日期的价格低于开始日期的价格吗?
标签: mysql date select records closest