修改SQL查询以排除特定日期

时间:2009-10-11 18:52:35

标签: php sql mysql

我有一个很长的SQL查询,对于特定“区域”中的所有用户,在给定的月份,我会使用它来计算他们“执行任务”的天数。这可以分解为周末和工作日。这是php / SQL语句:

 $result = mysql_query("

 SELECT fname, lname, MONTH( eventDate ) AS MONTH , 
    SUM( IF( WEEKDAY( eventDate ) <=2, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 6, 1, 0 )) AS WeekdayCount, 
    SUM( IF( WEEKDAY( eventDate ) = 4, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 5, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 3, 1, 0 )) AS WeekendCount, 
    SUM( IF( secondary =0, 1, 0 ) ) AS `Primary`, 
    SUM( IF( secondary =1, 1, 0 ) ) AS `Secondary` 
 FROM eventcal AS e 
 LEFT JOIN users AS u ON e.primary = u.username 
 WHERE e.region = '$region' AND MONTH( eventDate ) = '$month' 
 GROUP BY fname, lname, MONTH( eventDate ) 
 ORDER BY lname

");

不幸的是,对于不同的地区,一周中的不同日期被视为周末和工作日 - 如上所示。所以周日可能不算周末。但这在这里并不重要。

我的问题是,我想说:“从2009年10月10日到2009年10月13日的任何日子都不包括在内。

有谁知道如何修改这个SQL来说明这一点?或者我可以编写一些PHP脚本吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以添加where子句(就在'GROUP BY'之前)

AND eventDate NOT BETWEEN '2009-10-10' AND '2009-10-13'

注意:根据数据库,between语句可以有不同的功能 - 它可以是包容性的或排他性的,即它可以包括或排除完全落在范围的开头或结尾的结果,所以可选:

AND (eventDate<'2009-10-10' OR eventDate>'2009-10-13')

另请注意,在纯文本中包含日期sql查询在不同数据库上的处理方式不同,因此请阅读数据库的文档。以上内容适用于postgres。