【问题标题】:SQL get all of the users last searchSQL获取所有用户最后一次搜索
【发布时间】:2020-03-30 14:31:32
【问题描述】:

我可以轻松获得用户搜索,但我想获得所有用户的最后一次搜索。例如,下面的 SQL 代码将获取此特定用户的最后一次搜索。

select uid, itemDescription, date from SEARCH 
    WHERE date BETWEEN '2020-03-01' AND '2020-03-30' 
        AND uid = "000-000-000-000-000"
    ORDER BY date DESC
    LIMIT 1

如果我尝试编辑它并删除uid = "",这将不起作用,因为它将限制为一次搜索。如果我也删除LIMIT 1 并添加GROUP BY uid,它不会拾取最后一个条目。

任何想法将不胜感激。

【问题讨论】:

    标签: mysql sql greatest-n-per-group


    【解决方案1】:

    您可以使用相关子查询:

    select uid, itemDescription, date
    from SEARCH s
    where s.date BETWEEN '2020-03-01' AND '2020-03-30' and
          s.date = (select max(s2.date)
                    from search s2
                    where s2.uid = s.uid and
                          s2.date = s.date
                   );
    

    为了提高性能,您需要在search(uid, date) 上建立索引。

    你也可以试试窗口函数:

    select s.*
    from (select s.*,
                 row_number() over (partition by uid order by date desc) as seqnum
          from search s
          where .date between '2020-03-01' and '2020-03-30' 
         ) s
    where seqnum = 1;
    

    【讨论】:

    • 我尝试运行它时超时。
    猜你喜欢
    • 2012-11-21
    • 2020-08-18
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多