重新发布这个问题,因为我仍然在努力寻找正确的解决方案。
我能够分离出'OA‘唯一的场景,并适当地将它们标记为NA。然而,我在隔离'I‘唯一的事件以及适当地老化同时具有I和OA事件的EquipID时遇到了问题。
这是我现在用来老化的逻辑,它只适用于'I‘的事件,但正确地隔离'I’和'OA‘EquipID,然后得到两个日期之间的差异是我难以理解的。
datediff(curdate(),concat(left(eventDateTime,4),'-',mid(eventDateTime,5,2),'-',mid(eventDateTime,7,2))) as age_in_depot
我尝试过按EquipID进行分组,但当然这只给出了一个eventDateTime结果,而且它总是第一个结果,在“I”和“OA”的情况下,它只是“I”eventDateTime。
我也有识别'I‘和'OA’事件的逻辑,但只有当我打算将设备I分组到一行时,这才能正常工作,如上所述,删除了正确老化这些设备I所需的第二个eventDateTime条目。
GROUP_CONCAT( DISTINCT StatusCD) as StatusCD

任何帮助或见解都是非常感谢的。一旦我有了这个“我”唯一的事件标记和老化,我终于可以完成这个仪表板,我正在为我们的团队构建。
提前谢谢你。
J
发布于 2021-04-27 04:52:38
透视表,以便将开始日期和结束日期放入同一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', DATE(STR_TO_DATE(eventDateTime, '%Y%m%d%H%i')), NULL) AS OutDate
FROM yourTable
GROUP BY EquipID
) AS xhttps://stackoverflow.com/questions/67273452
复制相似问题