2014-09-05 203 views
1

我想從我的數據庫選擇過去7天SQL時間戳間隔減去7天

到目前爲止,我有以下幾點:

SELECT timestamp, COUNT(is_complete) 
FROM module_activity 
WHERE user_id = 30 
     AND timestamp BETWEEN NOW() 
     AND DATE_ADD(NOW(), INTERVAL -7 DAY) 
GROUP BY timestamp ORDER BY timestamp ASC 

但是這給了我沒有結果。

我的表看起來像這樣:

# id, user_id, module_id, is_complete,  timestamp 
    '1', '30',  '5',  '1',  '2014-08-31 00:00:00' 
    '2', '30',  '6',  '1',  '2014-09-01 00:00:00' 
    '3', '30',  '7',  '1',  '2014-09-02 00:00:00' 
    '4', '30',  '8',  '1',  '2014-09-03 00:00:00' 
    '5', '30',  '9',  '1',  '2014-09-04 00:00:00' 
    '6', '30',  '10',  '1',  '2014-09-05 00:00:00' 

誰能告訴我什麼,我做錯了什麼?

+1

您正在使用哪個數據庫管理系統? – 2014-09-05 11:57:07

回答

1

從MSSQL文檔上的發言之間:

test_expression BETWEEN begin_expression AND end_expression 

的第一個值(與begin_expression)被認爲是在較低的值,並且第二值(end_expression具有)被認爲是上限值。例如。 col BETWEEN 1 AND 3

您的陳述的上下邊界是錯誤的,例如,你有col BETWEEN 3 AND 1。這與編寫WHERE col >= 3 AND col <= 1不可能是真實的相同,這就是爲什麼你沒有看到任何行。

您需要交換價值較低的順序(即現在 - 7天)和較高的值(即現在)

timestamp BETWEEN DATE_ADD(NOW(), INTERVAL -7 DAY) AND NOW() 
+0

*假設*這是用於SQL Server ....問題不明確...... – 2014-09-05 12:04:34

+0

這個行爲是由SQL標準定義的,所以對於所有符合數據庫引擎的應該是相同的。 – 2014-09-05 12:07:19

+0

儘管如果DBMS支持它,您可以使用'x BETWEEN SYMMETRIC y AND z'使句子順序不敏感。默認是假定不對稱。 – 2014-09-05 12:14:05