2012-02-16 68 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)