从MySQL数据库中优化查询结果

时间:2014-01-09 23:48:57

标签: mysql sql

我有以下查询:

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

这很好用,会产生以下结果:

enter image description here

我想要做的只是每个日期返回一个name。所以第9个,name = 1,只有1个结果,而不是2,就像现在一样。

2 个答案:

答案 0 :(得分:1)

  1. 当同一日期有多个“名字”时,你需要弄清楚你想要的名字。
  2. 然后,您可以按日期分组,并使用COUNTMAX等聚合函数选择正确的“名称”。
  3. 如果你不解释你选择的规则,我无法帮助你。

答案 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

(我为开口和约会做了一笔款项,你可以做最小值,最大值,数量等等。选择最符合你要求的那个!)