如何解决正确分桶的 MySQL 案例声明
重新发布这个问题,因为我仍在努力寻找正确的解决方案。
我能够隔离“OA”场景并将它们适当地标记为 NA。但是,我在隔离“I”事件以及正确老化同时具有 I 和 OA 事件的 EquipID 时遇到了问题。
这是我现在用于老化的逻辑,它适用于仅“I”的事件,但正确隔离“I”和“OA”EquipID,然后获取两个日期之间的差异是我无法理解的。
datediff(curdate(),concat(left(eventDateTime,4),'-',mid(eventDateTime,5,2),7,2))) as age_in_depot
我尝试按 EquipID 分组,但当然这只会给我一个 eventDateTime 结果,而且它始终是第一个结果,在“I”和“OA”的情况下,它只是“I”eventDateTime。
>我也有识别“I”和“OA”事件的逻辑,但只有当我打算将 EquipmentID 分组到一行时,这才正常工作,如上所述,删除了正确老化所需的第二个 eventDateTime 条目这些EquipID。
GROUP_CONCAT( DISTINCT StatusCD) as StatusCD
非常感谢任何帮助或见解。一旦我标记了这个“我”唯一的事件并老化,我就可以最终完成我为我们的团队构建的这个仪表板。
提前致谢。
J
解决方法
旋转表格,以便您将进入和退出日期放入同一 EquipID
的不同列中。然后您可以减去它们,并为缺失的日期应用适当的默认值。
SELECT EquipID,InDate,OutDate,StatusCD_N,CASE WHEN InDate AND OutDate THEN DATEDIFF(OutDate,InDate)
WHEN InDate THEN DATEDIFF(CURDATE(),InDate)
ELSE 'N/A' -- only OutDate
END AS AgeInDepot
FROM (
SELECT EquipID,GROUP_CONCAT(StatusCD) AS StatsuCD_N,MAX(IF(StatusCD = 'I',DATE(STR_TO_DATE(eventDateTime,'%Y%m%d%H%i')),NULL) AS InDate,MAX(IF(StatusCD = 'OA',NULL) AS OutDate
FROM yourTable
GROUP BY EquipID
) AS x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。