2013-04-03 131 views
2

我需要使用類似:MYSQL SELECT MAX(ID)+ 1其中id <1000

INSERT into tablename(id) 
    SELECT max(id) + 1 
    FROM tablename 

其中id小於1000和if max(id) = 1000 insert next id as 1,以使得該柱從1-1000並重新開始填充。

我可以自動增加主鍵列。

任何幫助將不勝感激。

我不是一個SQL大師,但有了下面的評論我已經在Delphi中完成了這個工作,這是SQL執行的地方。我仍然想知道如何在MYSQL中做到這一切,也許這裏的專家之一可以幫助完成這一切。

這是我做過什麼:

procedure TForm11.Button1Click(Sender: TObject); 
var 
lastserial : Integer; 
begin 
with LastRowQuery do 
    begin 
    sql.Clear; 
    sql.Add('SELECT autoid, id FROM inctest ORDER BY autoid DESC LIMIT 1;'); 
    execute; 
    end; 
    If LastRowQueryid.value < 1000 then lastserial:= LastRowQueryid.value + 1 
    else 
    lastserial := 1; 
    with LastRowQuery do 
    begin 
    sql.Clear; 
    sql.Add('Insert into inctest (id) values(:theserial)'); 
    ParamByName('theserial').Value := lastserial; 
    execute; 
end; 
end; 
+0

我不認爲有一個可行的方法來做到這一點。你必須選擇最高,最重複的ID_。 – 2013-04-03 23:03:41

+0

如何:INSERT into inctest(id) SELECT TOP 1 id%100 + 1 FROM inctest ORDER BY autoid DESC' – kobik 2013-04-04 10:23:44

+0

@kobik我認爲這個語法在MYSQL中會有所不同。 – 2013-04-04 10:35:34

回答

4

我想,也許你想這樣的: http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_mod

給予

INSERT into tablename(id) SELECT MOD(count(id),1000)+1 FROM tablename 

或類似的,

INSERT into tablename(id) SELECT (count(id)%1000)+1 FROM tablename 

乾杯。

+0

感謝您的快速響應。我嘗試過,但在最大值開始後加0. 0. – 2013-04-03 22:16:03

+1

我認爲'%'操作符在SQL中是標準的,並且易於閱讀,恕我直言 – user606723 2013-04-03 22:17:41

+1

@ user2242467,請嘗試理解答案而不是複製和粘貼。我想你想'選擇mod(max(id),1000)+ 1' – user606723 2013-04-03 22:19:07

相關問題