如果表中某个字段的总和对于表中每个日期的 X 小于 X,请选择“行”


select rows if the sum of a field in the table is less than X for each date in the table

这是我的第一个问题,所以如果我做错了,请原谅我。我一直在尝试为上述问题想出一个查询,但我似乎无处可去。

SELECT SUM(slots) AS totals,date 
  FROM 
     (
         SELECT start, end, date, slots 
           FROM 1000_appointments 
          WHERE date > NOW() AND HOUR(end) <= 12 AND employeeID='1000001'
     ) q 
 GROUP BY date HAVING totals < 6

这让我知道插槽总数小于 6 的日子,这很好,但我还需要该日期的所有行,如果可能的话,还需要表中没有条目的日期。我可以在 php 中进行排序和列出,但我认为在 mysql 中可能有更优雅的方法。

我希望这能很好地描述问题。这背后的原因是我需要找到"插槽"仍然可用的日期,即未预订的日期。

谢谢你,提前你的帮助。

包装将为您获取所有行:

SELECT start, end, a.date, slots, totals 
        FROM 1000_appointments a
        JOIN
        (SELECT SUM(slots) AS totals,date
            FROM 1000_appointments 
            WHERE date > NOW() AND HOUR(end) <= 12 AND employeeID='1000001'
            GROUP BY date HAVING totals < 6
        ) t 
        where a.date = t.date

获取不在表中的日期并不容易。它可能需要使用游标。我建议在你的php代码中这样做。