代码之家  ›  专栏  ›  技术社区  ›  jrharshath

SQL查询困难

  •  3
  • jrharshath  · 技术社区  · 16 年前

    我正试图为一个在线编码事件网站写一个查询,但我发现它特别难处理。

    我有一个表格提交:

    submissions => subid | uid | pid | subts | status
    
    uid = userid
    pid = problem id
    subts = timestamp when the submission was submitted
    status = whether the answer is right or not
    

    一个用户可能已经为一个给定的PID提交了多次。

    我想知道:对于每个问题,谁是最新提交解决方案的用户?

    现在,我不在乎解决方案是对还是错。

    我想能解决的问题是

    select pid, uid, max(subts) from submissions group by pid;
    

    但它没有按我想要的方式工作。此查询可以找到最大值ts,但与其关联的uid不正确。

    有人能告诉我我的问题是什么吗?为我的目的编写查询的正确方法是什么?

    谢谢

    注意:我使用的是MySQL。

    编辑:我可以通过遍历所有pid并编写

    select pid, uid, max(subts) from submissions where pid=$pid order by subts desc limit 1;
    

    但我真的不想这么做。我想知道一个查询是否可以完成我想要的。如果是,我想知道怎么做。

    2 回复  |  直到 16 年前
        1
  •  3
  •   MatsT    16 年前

    SELECT s.uid, s.pid, s.subts
    FROM submissions s,
       (SELECT max(subts) as maxdate, pid
         FROM submissions
         GROUP BY pid) maxresults
    WHERE s.pid = maxresults.pid
    AND s.subts = maxresults.maxdate;
    

        2
  •  1
  •   Piskvor left the building Rohit Kumar    16 年前

    SELECT pid, uid, subts FROM submissions WHERE pid = 1234 ORDER BY subts DESC LIMIT 1;
    

    pid subts


    uid

    select