论坛的新手。我想知道那里的人是否可以帮助解决我遇到的问题?
我需要在查询中添加一个添加列,以显示序列号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
答案 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;