如何像在Excel中那样在MySQL中“填充系列”(线性步长值)?

问题描述 投票:1回答:1

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

[(1)SELECT * FROM blog_posts其中postid = 5 ORDER BYrowidASC

我从一个大表中获得此查询结果:

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 excel increment series minimum
1个回答
0
投票

在mysql 5.x中,您可以这样做

在mysql 8中,您具有窗口功能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 

SET bp.Unix_TimeStamp = t1.Unix_TimeStamp;

[View on DB Fiddle](https://www.db-fiddle.com/f/wUqVKNZy96RjR7hTk3md7o/4)
© www.soinside.com 2019 - 2024. All rights reserved.