我在查询时遇到问题,我无法思考如何对其进行说明。
自上次检查以来,从日志中提取事件计数。
目前我有这个:
SELECT COUNT(*) AS alertcount, date AS alertdate
FROM alerts WHERE to_id = '$id' AND date > '$lastcheck'
但是,我希望它排除expire=1
和date
超过30分钟的所有字段。
因此,如果它们都是真的,它将忽略计数中的那条记录。
答案 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)