使用Mysql查询检索两个日期之间的记录

3

我有一个需求,但我完全不知道该如何编写查询语句。作为公司的新手,请帮助我。

用户将选择以下日期:

例如: 开始日期: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  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是什么吗? - zxc
1
@bew 我认为那些是该价格的日期范围。 - SoWhat
@SomeshMukherjee 好的,我会将其转换为“日期”类型,您能否将其视为“日期”类型并提供查询? - user2660409
MySQL日期格式为yyyy-mm-dd。我需要这种格式。 - SoWhat
@SomeshMukherjee 我已经在这里以及我的表格中更改了日期格式。 - user2660409
显示剩余6条评论
6个回答

3
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 这个查询很好用,我得到了第一个预期的结果。 - user2660409
我自己写了一个查询,但是得到了第二个预期结果。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 - user2660409
要小心,如果日期在2013年1月和2013年10月之间,这可能不起作用。它不会选择中间的房间,但您应该可以从这里开始构建。 - SoWhat

1
尝试这个查询。
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,您能为我提供基于时间间隔的选择查询吗? - user2660409
@SomeshMukherjee 我已经提供了 yyyy-mm-dd 的格式。提前致谢。 - user2660409

1

嘿,试试这个(SQL Server)

SELECT room_id,SUM(price) FROM @table WHERE date1>='07/25/2013' AND date2<='09/26/2013' GROUP BY room_id


这个程序在你提供的日期上运行良好。但是用户可能会选择任何日期范围。 - user2660409

0
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适用于row id 8。使用您的查询,我得到0个结果。 - user2660409

0

查询 rooms 表中 Date1 和 Date2 之间的数据并合并:
SELECT * FROM rooms WHERE date BETWEEN Date1 AND Date2 UNION SELECT * FROM rooms WHERE date BETWEEN Date1 AND Date2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接