我是SQL的新手,我需要一些查询帮助,该查询应返回按日期排序的顶部事件。
实际上,我有一个表,其中添加了用户在搜索日期旁边进行的搜索(列采用DATETIME格式)。 我想做的是创建一个“趋势搜索”列表,该列表将显示过去一周(例如星期日至星期日)进行的前7次搜索,但是我不确定从哪里开始。
我听说过DATEPART函数,但我不知道如何与前7个事件一起使用。
在此先感谢您的帮助,祝您愉快!
答案 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