如何在 MySQL 中像在 Excel 中那样 "Fill Series"(线性步长值)?

How to "Fill Series" (Linear step value) in MySQL like in Excel?

在Excel中,用线性步长值填充序列很简单。我如何在 MySQL 中做到这一点?

(1) SELECT * FROM blog_posts where postid = 5 ORDER BY rowid ASC

我从一个巨大的 table:

中得到这个查询结果
rowid   postid    Unix_TimeStamp
100     5          1000000000
135     5          1656885375
142     5          1885649882
208     5          1928211766

(2)接下来,我需要更改 Unix_TimeStamp 的值。我想单独保留第一行 (rowid=100),然后每一行的 Unix_TimeStamp 都比前一行高 100。结果将是:

rowid   postid    Unix_TimeStamp
100     5          1000000000
135     5          1000000100
142     5          1000000200
208     5          1000000300

非常感谢慷慨的回复。

在mysql 5.x中你可以这样做

在 mysql 8 中你有 window 函数 rownumber

架构(MySQL v5.7)

CREATE TABLE blog_posts  (
  `rowid` INTEGER,
  `postid` INTEGER,
  `Unix_TimeStamp` INTEGER
);

INSERT INTO blog_posts 
  (`rowid`, `postid`, `Unix_TimeStamp`)
VALUES
  ('100', '5', '1000000000'),
  ('135', '5', '1656885375'),
  ('142', '5', '1885649882'),
  ('208', '5', '1928211766');

查询#1

SELECT 
`rowid`, `postid`
,(SELECT MIN(`Unix_TimeStamp`) FROM blog_posts where postid = 5 ) + @rn *100 `Unix_TimeStamp`
 ,@rn := @rn + 1 ronn
FROM blog_posts, (SELECT @rn := 0) a
where postid = 5 
ORDER BY rowid ASC;

| rowid | postid | Unix_TimeStamp | ronn |
| ----- | ------ | -------------- | ---- |
| 100   | 5      | 1000000000     | 1    |
| 135   | 5      | 1000000100     | 2    |
| 142   | 5      | 1000000200     | 3    |
| 208   | 5      | 1000000300     | 4    |



  UPDATE blog_posts bp INNER JOIN (SELECT 
`rowid`, `postid`
,(SELECT MIN(`Unix_TimeStamp`) FROM blog_posts where postid = 5 ) + @rn *100 `Unix_TimeStamp`
 ,@rn := @rn + 1 ronn
FROM blog_posts, (SELECT @rn := 0) a
where postid = 5 
ORDER BY rowid ASC) t1 ON bp.rowid = t1.rowid 

设置 bp.Unix_TimeStamp = t1.Unix_TimeStamp;

[View on DB Fiddle](https://www.db-fiddle.com/f/wUqVKNZy96RjR7hTk3md7o/4)