MySQL从不包括年份的日期范围中选择一行

时间:2015-11-12 16:41:03

标签: mysql date-range

我正在尝试创建一个MySQL查询,以便从一个日期范围与另一个日期范围之间的表中选择每日价格。我只想使用“季节”表中的“开始结束”月份和日期,我想动态地将年份传递给查询。

这是我的疑问:(我给它年份排除桌面上的那个)

SELECT a.season, b.base_price 
FROM seasons a 
JOIN pricebyseason b ON a.id=b.season_id 
WHERE b.prop_id='6' AND '2015-11-29' BETWEEN DATE_FORMAT(a.starting,'2015-%m-%d') AND DATE_FORMAT(a.ending,'2016-%m-%d') 
ORDER BY b.base_price DESC

它适用但不适用于所有日期。

这些是表格:

季节(这些是静态日期值)

+----+--------------+------------+------------+
| id |    season    |  starting  | ending     |
+----+--------------+------------+------------+
|  1 | Peak Season  | 2015-12-11 | 2016-01-09 |
|  2 | High Season  | 2015-11-27 | 2016-04-15 |
|  3 | Mid Season   | 2015-04-16 | 2015-09-01 |
|  4 | Low Season   | 2015-09-02 | 2015-11-26 |
|  5 | Spring Break | 2015-03-05 | 2015-03-21 |
+----+--------------+------------+------------+

pricebyseason

+----+---------+-----------+------------+
| id | prop_id | season_id | base_price |
+----+---------+-----------+------------+
|  1 |       6 |         1 |        950 |
|  2 |       6 |         2 |        750 |
|  3 |       6 |         3 |        450 |
|  4 |       6 |         4 |        400 |
|  5 |       6 |         5 |        760 |
+----+---------+-----------+------------+

我想要的是查询签到,结账选择之间的透明价格 我创建了这个sqlfiddle:http://sqlfiddle.com/#!9/4a6f4

这是一个无效的先前查询:

SELECT a.base_price,b.season,b.starting,b.ending
FROM pricebyseason a JOIN seasons b ON a.season_id=b.id
WHERE a.prop_id='6' AND
(DATE_FORMAT(b.starting,'%m-%d') <= '12-27' OR DATE_FORMAT(b.starting,'2016-%m-%d') >= '2015-12-27')
AND
(DATE_FORMAT(b.ending,'%m-%d') >= '12-27' OR DATE_FORMAT(b.ending,'2016-%m-%d') <= '2015-12-27')
ORDER BY base_price DESC

以下是每个季节的一些示例日期:'2016-01-08','2015-12-27','2016-04-14','2015-11-29','2016-04- 15' , '2015年9月1日', '2016年9月2日', '2015年11月26日', '2016年10月10日', '2016年3月18日', '2016年6月22日' , '2015年6月15日'

非常感谢

0 个答案:

没有答案