【问题标题】: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 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 2012-12-28
          • 2014-01-08
          • 2015-12-25
          • 1970-01-01
          相关资源
          最近更新 更多