簡體   English   中英

如何獲得特定月份SQL查詢的總和?

[英]How to get sum of particular month SQL query?

我的表-> id,employee,in_time,out_time,note(我還有另一個表員工表),即時消息正在使用此查詢生成,這是我的JSP頁面Excel文檔->

public function getMainQuery(){
        $query = "SELECT 
        (SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
        DATE_FORMAT(in_time, '%Y-%m-%d') as 'Date',
        DATE_FORMAT(in_time, '%H:%i:%s') as 'Time In ',
        DATE_FORMAT(out_time, '%H:%i:%s') as 'Time Out ',
    DATE_FORMAT(out_time, '%i')- DATE_FORMAT(in_time, '%i')),as 'WorkingHours'
        FROM Attendance ";

        return $query;
}

我在Excel中生成此數據->

 Employee                       Date    Time In Time Out    Working Hours

    Kasun Sameera Gunasekara    4/10/2015   8:50:21 19:02:47    10:12
    Kasun Sameera Gunasekara    4/9/2015    8:48:38 18:20:08    9:32
    Kasun Sameera Gunasekara    4/8/2015    9:08:47 17:35:57    8:27
    Kasun Sameera Gunasekara    4/7/2015    9:35:16 18:21:59    8:46
    Jehan  Rodrigo              4/7/2015    9:45:10 18:19:22    8:34
    Kasun Sameera Gunasekara    4/7/2015    9:35:16 18:21:59    8:46
    Rajitha Wickrama            4/7/2015    9:13:18 18:26:16    9:13
    Maurice A. PRIYANSITH P     4/7/2015    9:09:39 18:13:10    9:04
    Shalika Nadee Sirithunga    4/7/2015    9:09:04 18:07:24    8:58

    Kasun Sameera Gunasekara    4/2/2015    9:09:59 19:29:33    10:20
    Kasun Sameera Gunasekara    4/1/2015    8:51:29 18:00:29    9:09

但是我想生成這樣的細節->

 Employee                   Month  Totalworkinghours
 Kasun Sameera Gunasekara   April   55.59

Str_to_dateMonthGroup by

Select TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(Working Hours))), "%h:%i") 
From table    
Where Month(Str_to_date(date,'%d/%m/%y'))='4' 
Group by Month(Str_to_date(date,'%d/%m/%y')) 

您必須使用GROUP BY獲取字段摘要,並使用SUM獲取該GROUP BY的總計。 閱讀https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

試試這個

SELECT 
    a.employee AS employee_id,
    concat(e.`first_name`,' ',e.`middle_name`,' ',e.`last_name`) as employee_name,
    DATE_FORMAT(out_time, '%M') as month_name,
    SUM(TIMESTAMPDIFF(HOUR, a.in_time, a.out_time)) AS total_working_hours,
    SUM(TIMESTAMPDIFF(SECOND, a.in_time, a.out_time)) AS total_working_seconds
FROM Attendance AS a 
INNER JOIN Employees AS e ON e.id = a.employee
WHERE a.in_time BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59'
GROUP BY a.employee, month_name

您應該考慮使用_total_working_seconds_,因為它更精確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM