2017-08-22 80 views
-1

我有以下模式MYSQL嵌套組通過使用單個查詢


Id | Employee_Name | Time_Taken | Job_Number | Date 

最後什麼,我想返回任何給定的日期範圍內的分貝爲以下形式

的結果
{ 
    "Brad":[ 
     { 
     "day":"1", 
     "avg_time":"1.65" 
     }, 
     { 
     "day":"2", 
     "avg_time":"2" 
     } 
    ], 
    "Emily":[ 
     { 
     "day":"1", 
     "avg_time":"1.65" 
     }, 
     { 
     "day":"2", 
     "avg_time":"2" 
     } 
    ] 
    .. 
} 

所以我想展示的是每個員工平均每天完成工作的時間。

我能想到的是,首先讓所有的員工,然後遍歷職工以及爲他們每個人做以下

SELECT DAYOFMONTH(FROM_UNIXTIME(date)), AVG(time_taken) 
     FROM PerformanceTable WHERE (date BETWEEN x AND y AND employee_name=name) 
     GROUP BY DAYOFMONTH(FROM_UNIXTIME(date)); 

請忽略任何輕微的語法錯誤與查詢,但那個是我心裏。我的問題是,有沒有辦法通過一個單一的查詢來做到這一點,而不會循環到員工身上。謝謝 !

+0

添加'Employee_Name'既'select'&'組by'和'where' – dnoeth

+0

你沒有提到它刪除,但,從你的'接受',大概時間存儲在整數秒。 – Strawberry

回答

1

我不會使用「一個月的日期」來定義一天。只需將日期組件從date列中取出(假定它有時間)。

然後,添加employee_nameselectgroup by

select employee_name, date(from_unixtime(date)) as date, 
     avg(time_taken) 
from PerformanceTable pt 
where date between x and y -- assumes "x" and "y" are integers, not dates 
group by employee_name, date(from_unixtime(date)) 
order by employee_name, date;