SQL查询日期为今天减去7天的数据

29

我有一个名为ExternalHits的SQL网站点击表,跟踪URLx作为URL和访问页面的日期作为Datex。我每周运行此查询以获取前一周的总点击数,并且每周都必须手动更改“between”日期。是否有一种方法可以更改我的查询,使“between”日期变成类似于TODAY AND TODAY-7的东西?我只想不必每周手动更改日期。

    SELECT URLX, COUNT(URLx) AS Count
    FROM ExternalHits
    WHERE datex BETWEEN '02/27/2017' AND '03/05/2017'    
    GROUP BY URLx
    ORDER BY Count DESC; 

如果这是SQL Server,那么查询语句应该是 BETWEEN CONVERT(date, GETDATE()) AND DATEADD(DD, -7, CONVERT(date, GETDATE()))。您的标签存在冲突。这是MySQL还是Microsoft SQL Server? - Cᴏʀʏ
1
由于标签冲突,这几乎是不可能回答的。MySQL和SQL Server之间的语法差异非常大。 - Sean Lange
已修复。是我的问题。它是SQL Server。 - Ashley K
2
每个答案都建议使用BETWEEN,这是有技术原因的吗?一个点击表永远不会有未来的日期。只使用 > DATEADD(DAY, -7, GETDATE()) 有什么问题吗? - MortimerCat
8个回答

41
declare @lastweek datetime
declare @now datetime
set @now = getdate()
set @lastweek = dateadd(day,-7,@now)

SELECT URLX, COUNT(URLx) AS Count
FROM ExternalHits
WHERE datex BETWEEN @lastweek AND @now
GROUP BY URLx
ORDER BY Count DESC; 

13

使用dateadd函数从当前日期减去一周。

datex BETWEEN DATEADD(WEEK,-1,GETDATE()) AND GETDATE()

8
您可以使用以下方法从当前日期中减去7天:
WHERE datex BETWEEN DATEADD(day, -7, GETDATE()) AND GETDATE()

2
请使用以下内容:

请使用以下代码:

WHERE datex BETWEEN GETDATE() AND DATEADD(DAY, -7, GETDATE())

希望这能帮到你。


2
你需要交换Between函数的参数。 - Polluks

2

使用内置函数:

SELECT URLX, COUNT(URLx) AS Count
FROM ExternalHits
WHERE datex BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()
GROUP BY URLx
ORDER BY Count DESC; 

0

对于MariaDB:

WHERE datex BETWEEN DATE_ADD(CURDATE(), INTERVAL -7 DAY) AND CURDATE()

它帮助了我。


0
DECLARE @Daysforward int
SELECT @Daysforward = 25 (no of days required)
Select * from table name

where CAST( columnDate AS date) < DATEADD(day,1+@Daysforward,CAST(GETDATE() AS date))

0
你可以使用CURDATE()DATE_SUB()函数来实现这个目标:
SELECT URLX, COUNT(URLx) AS Count
FROM ExternalHits
WHERE datex BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()    
GROUP BY URLx
ORDER BY Count DESC; 

1
这是MySQL吗? - falconR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接