SQL帮助!如何创建显示两个不同时间段之间持续时间的新列

SQL帮助!如何创建显示两个不同时间段之间持续时间的新列

问题描述:

在新数据集中,我创建了两个新列,Start_time和End_time。我还想创建一个显示这两次差异的列。这是我的代码:SQL帮助!如何创建显示两个不同时间段之间持续时间的新列

SELECT b.company, 
    b.NAME, 
    Max( 
    CASE 
       WHEN description = 'Green' THEN final_value 
    END) AS 'Start_Time', 
    Max( 
    CASE 
       WHEN description = 'Red' THEN final_value 
    END) AS 'End_Time', 
    cast(datediff(n, 
     CASE('End_Time' as datetime), 
    CASE('Start_Time' AS datetime)) AS float)/60 AS time_duration 
FROM  mydata a 
JOIN  ref_val b 
ON  a.ref_res = b.ref_res 
WHERE b.company = 'abc' 
GROUP BY b.company , 
    b.NAME 

当我运行此代码时,我收到一条错误,说End_Time无法绑定。有什么建议么?谢谢!

+1

您不能在列表中使用列别名作为参考。实际上,你不能在许多地方使用这种列别名。尝试简单地复制并粘贴代码以进行Start_Time和End_Time计算,并将其放入DATEDIFF中。现在,您正试图将字符串文字'End_Time'转换为datetime。 –

您可以使用子查询来使用您创建的别名,也不能使用float类型在mysql中强制转换值。

SELECT *, CAST(DATEDIFF(n, CAST(End_Time AS datetime), CAST(Start_Time AS datetime)) AS DECIMAL(10,2))/60 AS Time_Duration 
    FROM (SELECT B.COMPANY 
       ,B.NAME 
       ,MAX(case when DESCRIPTION = 'Green' then Final_Value end) as Start_Time 
       ,MAX(case when DESCRIPTION = 'Red' then Final_Value end) as End_Time 
      FROM mydata a 
      JOIN ref_val B 
      ON A.ref_res = B.ref_res  
     WHERE B.COMPANY = 'abc' 
     GROUP BY B.COMPANY 
        ,B.NAME 
     ) C