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

Posted

技术标签:

【中文标题】如何像在 Excel 中一样在 MySQL 中“填充系列”(线性步长值)?【英文标题】:How to "Fill Series" (Linear step value) in MySQL like in Excel? 【发布时间】:2020-08-14 07:23:16 【问题描述】:

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

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

我从一个巨大的表中得到这个查询结果:

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

非常感谢您的慷慨回复。

【问题讨论】:

请注意,在(2)中,我需要更改 Unix_TimeStamp 的值,谢谢! 所以你想在之前的基础上更新unix_timestampt。请检查此处给出的答案:***.com/questions/35897366/… 这能回答你的问题吗? MySQL update column based on previous row (same column) 【参考方案1】:

在 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)

【讨论】:

谢谢。它创建了温度值 ronn 很好的表。但是将 Unix_TimeStamp 与原始查询结果逐行匹配的命令是什么。也就是说,我需要更改原始查询结果的 Unix_TimeStamp 我添加了更新命令。如果你想对所有 postid 都这样做,那么洞的事情就会变得更加复杂。 非常感谢!作为一个非编码员,我不能感谢你!是的,成功了!

以上是关于如何像在 Excel 中一样在 MySQL 中“填充系列”(线性步长值)?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以像在 Excel 中一样合并数据透视表列 OBIEE 12c 的单元格和中心?

像在桌面手动创建表格一样,做一个共用のExcel导出

excel表格怎么填一列一样的内容

如何仅通过提供大小来像在 Java 中一样在 Kotlin 中创建数组?

如何像在搅拌机中一样用鼠标拖动相机

如何利用excel批量填word中的表格?