创建列以保持计数

1bqhqjot  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(231)

我有一个表,有4列id,animalid,calvdate和animalidlactno,我想添加一个额外的列,名为lactionno,当animalid的日期改变时,我会给它一个计数
下面是我的table

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
js81xvg6

js81xvg61#

在mysql版本<8.0中,我们可以使用会话变量模拟行号功能:

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

相关问题