如何从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);