SQL:检索过去一周添加的前7个条目

时间:2019-04-27 18:36:30

标签: sql sql-server datetime search

我是SQL的新手,我需要一些查询帮助,该查询应返回按日期排序的顶部事件。

实际上,我有一个表,其中添加了用户在搜索日期旁边进行的搜索(列采用DATETIME格式)。 我想做的是创建一个“趋势搜索”列表,该列表将显示过去一周(例如星期日至星期日)进行的前7次搜索,但是我不确定从哪里开始。

我听说过DATEPART函数,但我不知道如何与前7个事件一起使用。

在此先感谢您的帮助,祝您愉快!

4 个答案:

答案 0 :(得分:1)

这行吗?

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


SELECT COUNT(g.searchTerm) AS appearanceCount, g.searchTerm FROM DesiredTable AS g
WHERE g.DateSearched  BETWEEN @lastweek AND @now
GROUP BY(GameTypeId)
ORDER BY (appearanceCount) DESC

答案 1 :(得分:1)

提到datepart()表示SQL Server。如果是这样,您可以这样做:

select top (7) s.searchTerm, count(*)
from searches s
where s.searchTime >= dateadd(day, -7, getdate())
group by s.searchTerm
order by count(*) desc;

这是当前时间的最后7天。

如果要上个星期,一个非常简单的where是:

where datediff(week, s.searchTime, getdate()) = 1

答案 2 :(得分:0)

这个问题用mysql很容易解决。据我了解,您正在尝试做多种事情:

1。获取上周的搜索结果

使用DATETIME字段可以很容易地提取一年中的星期:

SELECT id FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

如建议here

2。获取前7位最常访问的人

其次,您说您希望拥有排名前7位的搜索,这些搜索将转化为最频繁出现的搜索字词。换句话说:您需要将相同的搜索词归为一组,并对其进行计数:

SELECT count(id), searchTerm FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY searchTerm

答案 3 :(得分:0)

另外: 要获得前n(这里是7)行,请使用rownum <= 7。 这样(添加到Gegenwinds解决方案中):

SELECT result.* FROM 
(SELECT count(id), searchTerm FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY searchTerm) result
ORDER BY count(id) DESC
WHERE rownum<= 7