SQL查询排除短语

时间:2012-02-16 11:24:36

标签: sql

我在查询时遇到问题,我无法思考如何对其进行说明。

自上次检查以来,从日志中提取事件计数。

目前我有这个:

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

但是,我希望它排除expire=1date超过30分钟的所有字段。

因此,如果它们都是真的,它将忽略计数中的那条记录。

4 个答案:

答案 0 :(得分: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) )

答案 1 :(得分: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)

答案 2 :(得分: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

答案 3 :(得分: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)