测试样本:
CREATE TABLE IF NOT EXISTS test_range (
`day` DATE,
`available` INT(11),
`car_id` INT(11)
);
INSERT INTO test_range (`day`, `available`, `car_id`) VALUES ('2014-11-20', 5, 1);
INSERT INTO test_range (`day`, `available`, `car_id`) VALUES ('2014-11-21', 5, 1);
INSERT INTO test_range (`day`, `available`, `car_id`) VALUES ('2014-11-22', 3, 1);
INSERT INTO test_range (`day`, `available`, `car_id`) VALUES ('2014-11-23', 5, 2);
INSERT INTO test_range (`day`, `available`, `car_id`) VALUES ('2014-11-24', 5, 2);
我的测试查询:
SELECT * from test_range
WHERE day between '2014-11-20' and '2014-11-23'
AND available > 3
GROUP BY car_id;
在这种情况下,我希望在此范围内所有可用的汽车,但是在22天时该汽车不可用,因此我希望它不会出现在结果中。
例如,如果我的天数介于20、21、22之间,并且我希望可用性高于4,则不应出现汽车1,因为在第22天它没有。
我如何才能只获得给定范围内全天可用的汽车?
一HAVING
条款应做的伎俩,只要你能找出多少天是你的搜索范围内(你应该能够很容易地做到)
SELECT * from test_range
WHERE `day` between '2014-11-20' and '2014-11-26'
AND `available` > 3
GROUP BY `car_id`
HAVING COUNT(*) = DATEDIFF('2014-11-26','2014-11-20')+1;
因为无论是汽车1也不汽车2可在所有日子里,唯一的汽车3(你可以看到我添加的,并在所有天可用)的结果显示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句