将序列号添加到特定于ID MySQL的现有数据

时间:2016-10-26 06:35:46

标签: mysql

论坛的新手。我想知道那里的人是否可以帮助解决我遇到的问题?

我需要在查询中添加一个添加列,以显示序列号1,2,3 ...等,但要使其特定于现有ID - s_id基于的顺序s_id。下面显示了我正在使用的数据示例。

'p_id' 's_id'

'327'  '569'

'330'  '569'

'1205' '569'

'350'  '1000'

我的目标是让它看起来像这样。

'Seq_no'   'p_id'  's_id'

'1'         '327'  '569'

'2'         '330'  '569'

'3'         '1205' '569'

'1'         '350'  '1000'

我已经看过添加一个自动增量bur无法将其重新绑定到后面专门针对s_id

非常感谢任何帮助。 最好的祝福 DSW

3 个答案:

答案 0 :(得分:0)

你可以通过自我加入来实现:

SELECT count(s.sid) as seq_no,t.p_id,t.s_id
FROM YourTable t
JOIN YourTable s 
 ON(t.s_id = s.s_id AND t.p_id >= s.p_id)
GROUP BY t.p_id,t.s_id

答案 1 :(得分:0)

一种常见的方法是使用MySQL user defined variables

在你的情况下,你需要其中两个。

SELECT 
 @rn := IF(@sameSid = s_id, @rn := @rn + 1 , 
        IF(@sameSid := s_id, 1, 1)
 ) AS Seq_no,
 p_id,
 s_id
FROM your_table 
CROSS JOIN 
(
    SELECT @sameSid := 0, @rn := 1
) AS var 
ORDER BY s_id , p_id

答案 2 :(得分:0)

假设您按(s_id,p_id)对数据集进行排序,那么这是一种方式(未经测试):

SELECT x.*
     , CASE WHEN @prev = x.s_id THEN @i:=@i+1 ELSE @i:=1 END i 
     , @prev := s_id prev
  FROM my_table x
     , (SELECT @prev:=null,@i:=0) vars 
 ORDER
    BY s_id,p_id;