第二个最后记录

时间:2016-08-22 19:51:26

标签: mysql

我试图让第二个记录使用mysql。 我做了一些研究,一些样本确定了数字或日期之间的差距。但我的情况是,contract_id并不总是前一个+1。任何想法?非常感谢你。

merchant_id  	 contract_id     start_date
10	              501            2016-05-01
10	              506            2016-06-01
13	              456            2015-12-01
13	              462            2016-01-01
14	              620            2016-06-01
14	              642            2016-07-01
14	              656            2016-07-05
	
	
merchant_id  	Second_last_contract_id
10	            501
13	            456
14	            642

contract_id!=之前的contract_id + X.(X未固定)

'start_date'告诉我们创建订单的合同。

2 个答案:

答案 0 :(得分:1)

这里有一个选项,使用user-defined variables为每组商家建立一个行号,然后按合同订购的每个组中的第二个进行过滤:

select * 
from (
  select *, 
      @rn:=if(@prevMerchantId=merchantid,
              @rn+1,
              if(@prevMerchantId:=merchantid, 1, 1)
              ) as rn
  from yourtable cross join (select @rn:=0, @prevMerchantId:=null) t
  order by merchantId, contractid desc
  ) t
where rn = 2

答案 1 :(得分:0)

这是另一种选择,使用GROUP_CONCAT()过滤SUBSTRING_INDEX()的结果:

SELECT   merchant_id,
         SUBSTRING_INDEX(SUBSTRING_INDEX(
             GROUP_CONCAT(contract_id ORDER BY start_date DESC),
         ',', 2), ',', -1) AS Second_last_contract_id
FROM     the_table
GROUP BY merchant_id

sqlfiddle上查看。

相关问题