我正在使用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
我该如何执行此任务?
答案 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()
排除postid
和userid
以及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);
然后只显示光标的结果