2017-03-06 196 views
2

我有一个SQL表格命中我的网站称为ExternalHits。我将URL追踪为URLx,并将该页面的日期作为Datex进行访问。我每周都会运行这个查询来获得前一周总访问数,而且每个星期我都必须手动更改“之间”日期。有什么方法可以改变我的查询,以便“之间”日期类似今天和今天7? Ijust希望不必每周都手动更改日期。SQL查询在哪里日期=今天减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; 
+0

如果这是SQL Server中,'之间的转换(日期,GETDATE())AND DATEADD(DD,-7,CONVERT(日期,GETDATE()))'。你的标签有冲突。这是MySQL还是Microsoft SQL Server? –

+1

有了冲突的标签,这几乎不可能回答。 mysql和sql server的语法差别很大。 –

+0

固定。我的错。这是SQL Server。 –

回答

4
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; 
+0

这正是我需要的!谢谢! –

0

使用内置的功能:

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

您可以使用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; 
0

您可以从当前日期减去7与此:

WHERE datex BETWEEN DATEADD(day, -7, GETDATE()) AND GETDATE() 
0

使用以下命令:

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

希望这有助于。

+1

你必须交换之间的参数。 – Polluks

1

使用dateadd从当前日期中删除一周。

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

你必须交换之间的参数。 – Polluks

+0

哎呀,修好了,谢谢 –