话不多说,先上数据:
情景:平时用的最多最熟悉的就是查询第一条或者最后一条记录,这种问题很简单,不外乎升序降序排列,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条件中用了小于的条件,
这是我之前并未用过的写法,觉得有些意思,特此记录一下。