我正在尝试计算哺乳期,这意味着我正在计算动物的产犊日期:当针对动物的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'
答案 0 :(得分:1)
没有答案,只是一个建议,评论太久了
像这样的数据集不会失去任何意义,而且会更容易阅读:
ID, animalid, calvDate
186, 81, '2018-08-08'
188, 66, '2017-12-18'
189, 66, '2017-12-28'
答案 1 :(得分:1)
您不需要为@row_num
和CalvDateLactationID
再次增加animalidLactationID
的值。
此外,我将Where
的{{1}}条件转移到内部Select查询,以进行进一步优化。请改用以下查询:
calvDate