我有以下查询:
SELECT routes.route_date, time_slots.name, time_slots.openings, time_slots.appointments
FROM routes
INNER JOIN time_slots ON routes.route_id = time_slots.route_id
WHERE route_date
BETWEEN 20140109
AND 20140115
AND time_slots.openings > time_slots.appointments
ORDER BY route_date, name
这很好用,会产生以下结果:
我想要做的只是每个日期返回一个name
。所以第9个,name = 1,只有1个结果,而不是2,就像现在一样。
答案 0 :(得分:1)
COUNT
,MAX
等聚合函数选择正确的“名称”。如果你不解释你选择的规则,我无法帮助你。
答案 1 :(得分:1)
更新:请在此处查看SQLFIDDLE以了解不同类型的解决方案: http://sqlfiddle.com/#!2/9ac65b/6
如果你使用......它会解决你的请求吗?
SELECT DISTINCT routes.route_date ... 您的查询 ...?
这取决于您是否知道对于相同的日期/名称,您的行始终具有相同的值。
否则使用group by ...
(我觉得最适合您的要求)
SELECT routes.route_date, time_slots.name, sum(time_slots.openings), sum(time_slots.appointments)
FROM routes
INNER JOIN time_slots ON routes.route_id = time_slots.route_id
WHERE route_date
BETWEEN 20140109
AND 20140115
AND time_slots.openings > time_slots.appointments
group by routes.route_date, time_slots.name
ORDER BY route_date, name
(我为开口和约会做了一笔款项,你可以做最小值,最大值,数量等等。选择最符合你要求的那个!)