2012-02-16 72 views
2

我遇到了SQL查询的问题,我想不出如何对它进行描述。SQL查询不包括措辞

这是从您上次检查日志中记录事件的计数。

目前我有这样的:

SELECT COUNT(*) AS alertcount, date AS alertdate 
FROM alerts WHERE to_id = '$id' AND date > '$lastcheck' 

不过,我希望它排除所有领域,其中expire=1date超过30分钟了。

所以,如果他们两个表达式都是真的,它会忽略计数中的记录。

回答

1
SELECT COUNT(*) AS alertcount, date AS alertdate 
FROM alerts 
WHERE to_id = '$id' AND (date between '$lastcheck' and getdate() -30 minutes) and expire!=1 

我不知道你的数据库引擎,但如果是SQL Server,使用的dateadd函数来计算getdate() -30 minutes表达

编辑: 这里是你的新评论的条件。不知道在哪里的to_id将适合在这种情况下,你也不要需要一个日期参数

WHERE ((expire=0) OR (date > getdate() -30 minutes and expire=1)) 
+0

感谢。所以这将拉如果过期设置为0是从任何日期的所有领域?以及过期30分钟到期= 1? – user1022585 2012-02-16 11:42:43

+0

不,这不是你要求的。你是否希望所有的字段都是0,加上所有的字段都是最近30分钟的1? – Diego 2012-02-16 11:44:47

+0

是的,这就是我所需要的:)我使用的是mySQL db – user1022585 2012-02-16 11:47:43

1

这应该工作(我使用SQL Server日期时间函数)

SELECT 
    COUNT(*) AS alertcount 
, date AS alertdate 
FROM alerts 
WHERE to_id = '$id' AND date > '$lastcheck' 
AND (expire <> 1 OR dateadd(minute, -30, getdate()) < date) 
0

我认为你是寻找HAVING,是这样的:

SELECT COUNT(*) AS alertcount, date AS alertdate 
FROM alerts 
WHERE to_id = '$id' AND date > '$lastcheck' 
HAVING expire = 1 and DATEADD(minute, -30, GETDATE()) < yourDateField 
0
SELECT COUNT(*) AS alertcount, date AS alertdate 
FROM alerts WHERE to_id = '$id' AND date > '$lastcheck' 
AND(expire<>1 AND DateDiff(MINUTE, [date] , GETDATE())>30)