我试图让第二个记录使用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'告诉我们创建订单的合同。
答案 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上查看。