Mysql查询使用两个日期之间检索记录
Posted
技术标签:
【中文标题】Mysql查询使用两个日期之间检索记录【英文标题】:Mysql query to retrieve record using between for two dates 【发布时间】:2013-08-07 10:59:50 【问题描述】:我有一个要求,我完全不知道如何编写查询。我是这家公司的新人,所以请帮助我
用户将选择以下日期:
例如:
从日期:2013-08-02
到日期:2013-09-03
(YYYY-MM-DD)
id resort_id room_id Date1 Date2 price
5 35 45 2013-11-01 2013-11-30 3000.00
6 35 50 2013-07-25 2013-08-25 2000.00
7 35 541 2013-07-25 2013-08-25 4000.00
8 35 541 2013-08-26 2013-09-26 4000.00
现在我应该得到每个日期的基于价格的结果或两个日期组的价格总和(按房间 ID)
预期结果
id resort_id room_id Date1 Date2 price
6 35 50 2013-07-25 2013-08-25 2000.00
7 35 541 2013-07-25 2013-08-25 4000.00
8 35 541 2013-08-26 2013-09-26 4000.00
或
id resort_id room_id price
6 35 50 2000.00
7 35 541 8000.00
【问题讨论】:
你能解释一下什么是Date1和Date2吗? 这是一个复杂的查询 @bew 我认为这些是该价格的日期范围 Date1 和 Date 2 类似于 from_date 和 to_date。如果用户提供的日期介于 date1 和 date2 之间,则价格应显示在结果中 @SomeshMukherjee 是的,你是对的 【参考方案1】:SELECT * FROM lr_price_peak_rates WHERE `from_date`>='2014-04-08' AND `to_date`<='2014-04-30'
尝试上面的查询,它可以正常工作
【讨论】:
【参考方案2】:试试这个查询
SELECT * FROM `rooms` WHERE "2013-08-02" between Date1 AND Date2 UNION
SELECT * FROM `rooms` WHERE "2013-09-03" BETWEEN Date1 AND Date2
它是一个单一的查询。将其分成两行以便于阅读。我很确定这个查询缺少一些东西。我需要一个更大的测试集来验证。这不会选择中间情况。 使用用户选择的日期更改第一个日期。
【讨论】:
@SomeshMukerjee 此查询工作正常,我得到了第一个预期结果。 我自己写了一个查询,我得到了第二个预期结果。SELECT resort_id, room_id, SUM( test_price.price ) FROM test_price WHERE '2013-08-02' BETWEEN from_date AND to_date OR '2013-09-03' BETWEEN from_date AND to_date GROUP BY room_id
小心,但如果日期介于 2013 年 1 月和 2013 年 10 月之间,这可能不起作用。它不会选择介于两者之间的房间,但您应该可以从这里构建【参考方案3】:
试试这个查询
SELECT
id,
resort_id,
room_id,
Date1,
Date2,
SUM(price) AS Total_Price
FROM
MyTable
WHERE Date1> '2013-02-08' AND Date2 < '2013-02-09'
【讨论】:
@SomeshMukherjee 感谢您的评论。 Crescent 你能给我提供基于间隔的选择查询吗? @SomeshMukherjee 我提供了 yyyy-mm-dd 格式。提前致谢【参考方案4】:嘿试试这个(sql server)
SELECT room_id,SUM(price) FROM @table WHERE date1>='07/25/2013' AND date2
【讨论】:
这适用于您给定的日期。但用户可以选择任何日期范围。【参考方案5】:select * from table_name where date1 > '08/02/2013' AND date2 < '09/02/2013' ORDER BY date1 ASC, price ASC
【讨论】:
用户日期应该在 date1 和 date2 之间。例如:日期:08/02/2013 适用于 rowid:6 和 7,日期:09/02/2013 适用于行 id 8。使用您的查询我得到 0 个结果。【参考方案6】:SELECT * FROM rooms
WHERE Date1 和 Date2 UNION 之间的日期
SELECT * FROM rooms
在 Date1 和 Date2 之间选择日期
【讨论】:
以上是关于Mysql查询使用两个日期之间检索记录的主要内容,如果未能解决你的问题,请参考以下文章