SQL时间戳间隔减去7天

SQL时间戳间隔减去7天

问题描述:

我想从我的数据库选择过去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

从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