如何查询每个用户的第二条记录

话不多说,先上数据:

情景:平时用的最多最熟悉的就是查询第一条或者最后一条记录,这种问题很简单,不外乎升序降序排列,min()/max()函数,就可以做到了。

但是现在如果要查询第二条记录的话,sql语句该如何写呢?

今天搜到了一个解决办法,觉得sql写的不错,这里记录一下。

先声明:这不是我原创,是百度搜到的,只是略做整理,换了个我比较喜欢的数据模型。

下面是sql:

SELECT m.username,m.amount,m.time FROM test m LEFT JOIN (

        SELECT a.username,a.time,a.amount,count(b.time) AS num FROM test a
        LEFT JOIN test b
        ON a.username=b.username and b.time <= a.time
        GROUP BY a.time 

) n 
ON m.time = n.time
WHERE n.num=2

即可得到结果:

同时,这个sql还是可以扩展的,改变num的值,就可以查询第N条记录

并且我觉得比较取巧的是,子查询中join语句的on条件中用了小于的条件,

这是我之前并未用过的写法,觉得有些意思,特此记录一下。

原文地址:https://www.cnblogs.com/superfat/p/5808419.html