使用新列更新 sql 表
Posted
技术标签:
【中文标题】使用新列更新 sql 表【英文标题】:Updating a sql table with new column 【发布时间】:2011-11-27 18:12:57 【问题描述】:我正在使用 mysql,并且我有一个包含以下列的表:postid、userid、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
我该如何执行这项任务?
【问题讨论】:
您正在寻找行排名。看到这个问题***.com/questions/1964811/row-rank-in-a-mysql-view 【参考方案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()
的替代品。
除了 datestamp
之外,还按 postid
和 userid
排序,因为不能保证时间戳列是唯一的。
阅读setting variables in the manual。
【讨论】:
【参考方案2】: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/
【讨论】:
【参考方案3】:如果您只想按时间顺序排列日期,则不必创建另一列。你可以用一个简单的光标来做。
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);
然后只显示光标的结果
【讨论】:
以上是关于使用新列更新 sql 表的主要内容,如果未能解决你的问题,请参考以下文章
使用流式 API 更新新列后无法向 BigQuery 表插入新值