2017-08-29 37 views
1

在新數據集中,我創建了兩個新列,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。 –

回答

2

您可以使用子查詢來使用您創建的別名,也不能使用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 
相關問題