SQL 查询两个日期之间或之前的第一个日期

SQL Query Between 2 Dates or first one before

好的,所以我想找到一段时间内所有活跃的价格。 我有一个 table "prices" 每个价格和激活日期。

╔══════════════╦═════════════════╗
║ price_number ║ activation_date ║
╠══════════════╬═════════════════╣
║ Price 1      ║ 2014-12-03      ║
║ Price 2      ║ 2014-12-07      ║
║ Price 3      ║ 2014-12-12      ║
║ Price 4      ║ 2014-12-25      ║
╚══════════════╩═════════════════╝

现在我想 select 2014-12-09 和 2014-12-14 之间的活跃价格。

结果应显示价格 2 和价格 3(价格 2 因为它在 2014-12-09 和 2014-12-12 之间处于活动状态,直到价格 3 被激活)。

所以基本上我想要激活日期在 2014-12-09 和 2014-12-14 之间或 2014-12-09 之前的第一个激活日期的价格。

到目前为止我得到了什么:

SELECT * FROM prices 
WHERE (activation_date BETWEEN '2014-12-09' AND '2014-12-14') 
OR (Something I can't find)

我正在使用 MySQL 5.5

这有点复杂,因为前一行的条件。这是使用 union all 的一种方法:

(SELECT p.*
 FROM prices p
 WHERE activation_date BETWEEN '2014-12-09' AND '2014-12-14'
) UNION ALL
(SELECT p.*
 FROM prices p
 WHERE activation_date < '2014-12-09' AND
       NOT EXISTS (SELECT 1 FROM prices p2 WHERE activation_date BETWEEN '2014-12-09' AND '2014-12-14')
 ORDER BY activation_date DESC
 LIMIT 1
);

另一种方法是....

select * from ( select p1.price_number,p1.activation_date, min(dateadd(day,datediff(day,p1.activation_date,p2.activation_date)-1,p1.activation_date)) 'activationdate_end' from prices p1 inner join prices p2 on p1.activation_date < p2.activation_date group by p1.price_number,p1.activation_date ) A where ('2014-12-09' between A.activation_date and A.activationdate_end) or '2014-12-14' between A.activation_date and A.activationdate_end

这是在 MSSQL 中...但我相信它也可以在 MySQL

中完成