计算mysql中记录的出现

时间:2018-10-25 05:43:25

标签: mysql

我正在尝试计算哺乳期,这意味着我正在计算动物的产犊日期:当针对动物的calvDate更改为1时,将其添加到lactationID中以保持计数。 这是五列

#ID,LactationID,CalvDateLactationID, animalidLactationID,animalid, calvDate
'1', '1', '1 - 2018-08-08', '1 - T81', 'T81', '2018-08-08'
'2', '1', '1 - 2017-12-18', '1 - T66', 'T66', '2017-12-18'
'3', '2', '3 - 2017-12-28', '4 - T66', 'T66', '2017-12-28'

我用来生成此输出的查询是

SELECT 
  dt.ID,
  @row_num := IF(@aid <> dt.animalid, 1, @row_num + 1) as LactationID,
  concat(@row_num := IF(@aid <> dt.animalid, 1, @row_num + 1),' - ',calvDate) AS CalvDateLactationID,
  concat(@row_num := IF(@aid <> dt.animalid, 1, @row_num + 1),' - ',animalid) AS animalidLactationID, 
  @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 
where calvDate <> '' and calvDate <> '0000-00-00' ORDER BY dt.ID

我的预期输出是

#ID, LactationID,CalvDateLactationID, animalidLactationID,animalid, calvDate

'1', '1', '1 - 2018-08-08', '1 - T81', 'T81', '2018-08-08'
'2', '1', '1 - 2017-12-18', '1 - T66', 'T66', '2017-12-18'
'3', '2', '2 - 2017-12-28', '2 - T66', 'T66', '2017-12-28'

我可以在查询中进行哪些改进以帮助我生成预期的输出。

我的calvingdatecombined表包含以下列和示例数据

# ID, animalid, calvDate

'1', 'T81', '2018-08-08' 
'2', 'T66', '2017-12-18'
'3', 'T66', '2017-12-28'

2 个答案:

答案 0 :(得分:1)

没有答案,只是一个建议,评论太久了

像这样的数据集不会失去任何意义,而且会更容易阅读:

ID, animalid, calvDate
186, 81, '2018-08-08'
188, 66, '2017-12-18'
189, 66, '2017-12-28'

答案 1 :(得分:1)

您不需要为@row_numCalvDateLactationID再次增加animalidLactationID的值。

此外,我将Where的{​​{1}}条件转移到内部Select查询,以进行进一步优化。请改用以下查询:

calvDate