6

我想选择必须有两个或更多条目但表中应该有今天和明天日期的记录。我正在以日期格式将日期保存在表格中。

SELECT `availibility`.* 
FROM (`availibility`) 
WHERE `property_id`= 8818 
AND (availibility.unavailibility_date between CURDATE() 
AND DATE_ADD(CURDATE(),INTERVAL 1 DAY))

我正在使用上述查询,但即使存在一个日期(今天或明天)也是如此。我想获得这样的记录,例如应该有两个日期

+---------+----------------+------------+
|   ID    |   property_id  |  Date      |
+---------+----------------+------------+
| 369516  | 8818           | 2013-01-19 |
| 369517  | 8818           | 2013-01-18 |
| 369518  | 8818           | 2013-01-17 |
| 418021  | 8818           | 2013-08-27 |
| 418022  | 8818           | 2013-08-28 |
| 418022  | 8818           | 2013-08-29 |
| 418022  | 2001           | 2013-07-29 |
| 418022  | 2001           |2013-07-30  |
+---------+----------------+------------+

8818 属性应该出现在记录集中,因为两个日期都在这里

4

4 回答 4

8
SELECT property_id
FROM yourtable
WHERE date IN (CURDATE(), CURDATE() + INTERVAL 1 DAY)
GROUP BY property_id
HAVING COUNT(DISTINCT date)=2

在此处查看小提琴。

于 2013-08-28T10:48:20.173 回答
2

您可以使用:

NOW() + INTERVAL 1 DAY

如果您只对日期感兴趣,而不是日期和时间,那么您可以使用 CURDATE 而不是 NOW:

CURDATE() + INTERVAL 1 DAY

你的查询应该是

SELECT `availibility`.* 
FROM (`availibility`) 
WHERE `property_id`= 8818 
AND (availibility.unavailibility_date between CURDATE() 
AND CURDATE() + INTERVAL 1 DAY // change here 
于 2013-08-28T10:47:22.850 回答
1

使用 JOIN 确保第二条记录存在:

SELECT `availibility`.* 
FROM `availibility`
JOIN `availibility` AS availibility_tomorrow ON availibility_tomorrow.property_id =     availibility.property_id AND availibility_tomorrow.unavailibility_date = DATE_ADD(CURDATE    (),INTERVAL 1 DAY))
WHERE `property_id`= 8818 AND availibility.unavailibility_date = CURDATE()
于 2013-08-28T10:49:49.953 回答
0

如果我明白这一点就好了……

SELECT `property_id`, count(*) as no
FROM (`availibility`) 
WHERE `property_id`= 8818 
AND (availibility.unavailibility_date=CURDATE() 
OR availibility.unavailibility_date=DATE_ADD(CURDATE(),INTERVAL 1 DAY))
having no =2
于 2013-08-28T10:49:27.443 回答