如何从MySQL表中获取正确日期的价格

如何从MySQL表中获取正确日期的价格,mysql,Mysql,我有下表: ---+-------+------------+---------- id | price | e_date | item_name ---+-------+------------+---------- 1 | 1000 | 2015-01-01 | pen 2 | 1050 | 2015-02-01 | pen 3 | 800 | 2015-03-01 | pen 4 | 850 | 2015-03-20 | pen 5 | 1150 | 201

我有下表:

---+-------+------------+----------
id | price | e_date     | item_name
---+-------+------------+----------
 1 | 1000  | 2015-01-01 | pen
 2 | 1050  | 2015-02-01 | pen
 3 | 800   | 2015-03-01 | pen
 4 | 850   | 2015-03-20 | pen
 5 | 1150  | 2015-04-01 | pen
 6 | 500   | 2015-01-01 | pencil
 7 | 550   | 2015-02-01 | pencil
 8 | 700   | 2015-03-01 | pencil
---+-------+------------+----------
我想知道不同日子的价格。 假设我想得到
2015-02-15
的价格,那么价格将是
1050
。 我想得到
2015-03-15
的价格,那么价格将是
800

我使用了以下查询:

SELECT max(price) FROM table_name WHERE e_date<$date
从e\u date所在的表\u name中选择max(price)尝试以下操作:

select price
from table_name
where e_date <= $user_date
order by e_date desc
limit 1;
此查询提取从月初到用户提供的日期之间的所有记录。然后,它首先按最高价格订购,并显示最高价格

按商品获取当月最高价格

select price
from table_name
where e_date between date_format($user_date,'%Y-%m-01') and $user_date
order by price desc
limit 1;
select item_name, max(price) as max_price
from table_name
where e_date between date_format($user_date,'%Y-%m-01') and $user_date
group by item_name
order by max_price;
例如:

获取最接近日期的价格(之前或之后)


示例:和

最好的方法是只使用年和月进行查询,如下所示:

SELECT max(price) 
FROM table_name 
WHERE YEAR(e_date) = $year AND MONTH(e_date) = $month 
group by YEAR(e_date), MONTH(e_date);
或者您可以使用:

SELECT max(price) 
FROM table_name 
WHERE YEAR(e_date) = YEAR($date) AND MONTH(e_date) = MONTH($date) 
group by YEAR(e_date), MONTH(e_date);

只有当数据库中只有一个项目(如pen)时,它才会工作。如果有更多的项目(如铅笔、橡皮擦等),您的查询是如何工作的?如果use limit 1I在示例数据库表中添加了更多项,则它将只返回一项。现在请看我的示例表。让我在几分钟内把几个示例放在一起。添加一些示例以更接近您的需要您的上一个解决方案非常完美(您在SQLFIDLE中给出的查询)。但我需要在不同的价格和日期情况下进行测试。我会接受你的解决方案,显然,如果它可以返回正确的价格在所有情况下测试后。Thanks。它工作得很好,但是没有其他方法可以得到它吗?如果没有其他合适的答案,我会接受你的答案。谢谢你的解决方案。我发现你的代码有一个缺点。让我为一个特定的月份(假设为2015年3月)提供多个价格,那么代码将如何工作,因为2015年3月有多个价格。我已经在样品表上加了价格。现在请看桌子。谢谢,我也为您添加了第二个选项。也不起作用。2015年3月15日返回850抱歉,那么您的问题不够清楚。我以为你想得到某个日期某个月的最高价格。
select price
from test
order by abs(datediff(e_date, '2015-02-15')), price desc
limit 1;
SELECT max(price) 
FROM table_name 
WHERE YEAR(e_date) = $year AND MONTH(e_date) = $month 
group by YEAR(e_date), MONTH(e_date);
SELECT max(price) 
FROM table_name 
WHERE YEAR(e_date) = YEAR($date) AND MONTH(e_date) = MONTH($date) 
group by YEAR(e_date), MONTH(e_date);