mysql - 创建一个列来保持计数

标签 mysql

我有一个包含 4 列 ID、animalid、calvdate 和 AnimalidLactNo 的表,我想添加一个名为 lactationNo 的额外列,当 animalid 的日期发生变化时它会进行计数我会给它一个计数

下面是我的表格

CREATE TABLE `calvingdatecombined` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `animalid` varchar(80) DEFAULT NULL,
  `calvDate` varchar(15) DEFAULT NULL
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=65536 DEFAULT CHARSET=latin1;

我的预期输出:

#ID, animalid,calvDate,LactationID

1,ANIM400,2015-10-14,1
2,ANIM400,2015-10-15,2
3,ANIM400,2016-10-14,3
4,ANIM403,2015-10-14,1
5,ANIM404,2015-10-14,1

最佳答案

在 MySQL 版本 < 8.0 中,我们可以 emulate Row number functionality使用 session 变量:

SELECT 
  dt.ID, 
  @row_num := IF(@aid <> dt.animalid, 1, @row_num + 1) AS LactationID, 
  @aid := dt.animalid AS animalid, 
  dt.calvDate 
FROM 
(
  SELECT
    ID, 
    animalid, 
    calvDate
  FROM calvingdatecombined 
  ORDER BY animalid, calvDate, ID
) AS dt 
CROSS JOIN (SELECT @row_num := 0, 
                   @aid := '') AS user_init_vars 
ORDER BY dt.ID

关于mysql - 创建一个列来保持计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52964939/

相关文章:

mysql - 有什么办法可以在 SQL 中结合 LIKE 和 IN 吗?

c# - 无法以编程方式连接到 Mysql

mysql - 需要获取 MySQL 结果

php - mysql 内连接和动态排名计算错误#1241

java - 无法从另一个docker容器连接到docker容器中的mysql

mysql - CSV导入问题;在不同的服务器上导入抛出错误或成功

php - Ajax php 在 mysql 中插入一些奇怪的 jquery 代码而不是问号

php - 如何在 MySQL 中搜索逗号之间的特定字符串?

java - 当光标放在窗口上时弹出窗口

MySQL连接问题