首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于正确分词的MySQL Case语句

用于正确分词的MySQL Case语句
EN

Stack Overflow用户
提问于 2021-04-27 04:32:08
回答 1查看 23关注 0票数 0

重新发布这个问题,因为我仍然在努力寻找正确的解决方案。

我能够分离出'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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 04:52:38

透视表,以便将开始日期和结束日期放入同一EquipID的单独列中。然后,您可以减去它们,并对缺少的日期应用适当的默认值。

代码语言:javascript
复制
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 x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67273452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档