【问题标题】:SQL : retrieve top 7 of entries added in the past weekSQL : 检索过去一周添加的前 7 个条目
【发布时间】:2019-04-27 18:36:30
【问题描述】:
我是 SQL 新手,对于一个应该返回按日期排序的出现次数最多的查询需要一些帮助。
实际上,我有一个表格,其中添加了用户在搜索日期旁边完成的搜索(列是 DATETIME 格式)。
我想做的是创建一个“趋势搜索”列表,显示过去一周(例如周日到周日)完成的前 7 次搜索,但我不确定从哪里开始。
我听说过 DATEPART 函数,但我不知道如何将它与前 7 次出现一起使用。
提前感谢您的帮助,祝您有美好的一天!
【问题讨论】:
标签:
sql
sql-server
datetime
search
【解决方案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
【解决方案2】:
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
【解决方案3】:
这个问题用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
【解决方案4】:
此外:
要获取前 n 行(此处为 7)行,请使用 rownum
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