SQL插入查询多个最大ID

时间:2016-02-17 22:11:38

标签: sql sql-server sql-insert insert-update insert-into

表w:

|ID|Comment|SeqID|
|1 |bajg   | 1   |
|1 |2423   | 2   |
|2 |ref    | 1   |
|2 |comment| 2   |
|2 |juk    | 3   |
|3 |efef   | 1   |
|4 | hy    | 1   |
|4 | 6u    | 2   |

如何为新SeqID(SeqID增加1)的每个ID插入标准新注释

以下查询会产生最高的SeqID:

Select *
From w
Where SEQID = 
(select max(seqid)
from w)

表w:

|2 |juk    | 3   |

预期结果 表w:

|ID|Comment|SeqID|
|1 |sqc    | 3   |
|2 |sqc    | 4   |
|3 |sqc    | 2   |
|4 |sqc    | 3   |

我是否必须通过以下方式将所有值(新评论为sqc)插入表中,或者是否有更快的方法?

INSERT INTO table_name
 VALUES (value1,value2,value3,...);

2 个答案:

答案 0 :(得分:1)

试试这个:

INSERT INTO mytable (ID, Comment, SeqID)
SELECT ID, 'sqc', MAX(SeqID) + 1
FROM mytable
GROUP BY ID

Demo here

答案 1 :(得分:0)

您最好只在查询时计算值。在表格中定义identity列,例如CommentId并运行如下查询:

select id, comment,
       row_number() over (partition by comment order by CommentId) as SeqId
from t;

这种方法的好处是,id总是顺序的,你没有重复的机会,插入时不必锁定表,顺序id甚至可以用于更新和删除。