使用新列更新sql表

时间:2011-11-27 18:12:58

标签: mysql sql

我正在使用mysql,我有一个包含列的表:postid,userid,datestamp

我想创建一个名为'entry'的新列,根据datestamp按时间顺序对条目进行编号

所以,对于行:

3705    1   2003-12-08 13:42:13
3711    15  2003-11-12 15:22:01
3701    2   2004-01-11 01:22:12

我想最终:

3705    1   2003-12-08 13:42:13 2
3711    15  2003-11-12 15:22:01 1
3701    2   2004-01-11 01:22:12 3

我该如何执行此任务?

3 个答案:

答案 0 :(得分:1)

ALTER TABLE tbl ADD COLUMN nr integer;

SET @rn := 0;

UPDATE tbl
SET    rn = (@rn := @rn + 1)
ORDER  BY datestamp, postid, userid;

这是working demo

我从@OMG Ponies' Posting取代了MySQL中缺少的窗口函数row_number() 排除postiduserid以及datestamp,因为时间戳列不保证是唯一的。
阅读setting variables in the manual

答案 1 :(得分:0)

ALTER TABLE tbl ADD COLUMN entry INTEGER

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

要将其设置为有序数字,您将使用RANK函数,但MySQL没有,所以必须寻找像这样的替代品: http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/

答案 2 :(得分:0)

如果您只想按时间顺序订购您没有创建另一列的日期。你可以用一个简单的光标来完成它。

private static String[] FROM = {_ID, COL_1, COL_NAME, COL_2, COL_3, COL_4}; //add your columns
private static String ORDER_BY = COL_NAME + " DESC"; //or ASC for ascending
Cursor cursor = db.query(DATABASE_TABLE, FROM, null, null, null, null, ORDER_BY);

然后只显示光标的结果