2015-09-10 4 views
0

Я пытаюсь получить сумму столбца за каждый месяц. это то, что я сделал.выберите сумму столбца за каждый месяц

Мои SQL запросов:

SELECT `ID_Pilot` ,`PilotStationDate` ,`PilotWaitingTime`, (SELECT FORMAT(SUM(`PilotWaitingTime`),2) FROM pilot) AS Total 
FROM pilot 

это результат:

ID_Pilot PilotStationDate PilotWaitingTime Total 
    P001  2013-01-01      0.2 39.20 
    P002  2013-01-02      19.2 39.20 
    P003  2013-01-03      7.8 39.20 
    P004  2013-02-04      6.4 39.20 
    P005  2013-02-06      5.6 39.20 

и это результат я хочу:

ID_Pilot PilotStationDate PilotWaitingTime Total 
    P001  2013-01-01      0.2 27.20 
    P002  2013-01-02      19.2 27.20 
    P003  2013-01-03      7.8 27.20 
    P004  2013-02-04      6.4 12.00 
    P005  2013-02-06      5.6 12.00 

Примечание: 27,20 в Total колонке является сумма PilotWaitingTime в январе и 12.00 - это сумма PilotWaitingTime в феврале

Спасибо за вашу помощь

ответ

0

Этот запрос будет возвращать сумму за каждый месяц:

SELECT 
    DATE_FORMAT(PilotStationDate, '%Y-%m') as year_month, 
    FORMAT(SUM(`PilotWaitingTime`),2) as total 
FROM pilot 
GROUP BY 
    DATE_FORMAT(PilotStationDate, '%Y-%m') 

, то вы можете просто присоединиться назад этот запрос с помощью пилотной таблицы:

SELECT 
    p.`ID_Pilot`, 
    p.`PilotStationDate`, 
    p.`PilotWaitingTime`, 
    t.total 
FROM 
    pilot p INNER JOIN (
    SELECT 
     DATE_FORMAT(PilotStationDate, '%Y-%m') as year_month, 
     FORMAT(SUM(`PilotWaitingTime`),2) as total 
    FROM pilot 
    GROUP BY 
     DATE_FORMAT(PilotStationDate, '%Y-%m') 
) t ON DATE_FORMAT(p.PilotStationDate, '%Y-%m') = t.year_month 
+0

umm .. результат не такой, какой я хочу. – ashura91

+0

@ ashura91, пожалуйста, см. Мой обновленный ответ, правильный формат ''% Y-% m'' не ''% Y-% d'', теперь это должно быть нормально – fthiella

+0

он работает. большое спасибо – ashura91

0

Ваш данные таблицы пилота были бы полезны для обеспечения идеального запроса. Но вы можете попробовать эти два вопроса.

SELECT `ID_Pilot` ,`PilotStationDate` ,`PilotWaitingTime`, (SELECT FORMAT(SUM(`PilotWaitingTime`),2) FROM pilot p2 where p2.ID_Pilot = p1.ID_Pilot) AS Total 
FROM pilot p1; 

ИЛИ

SELECT `ID_Pilot` ,`PilotStationDate` ,`PilotWaitingTime`, FORMAT(SUM(`PilotWaitingTime`),2) AS Total 
    FROM pilot GROUP BY ID_Pilot; 
+0

Я скопировал запрос, но результат не похож на то, что я хочу – ashura91

0

Вот запрос вы можете попробовать (пример http://sqlfiddle.com/#!9/96667/1)

select pilot.*, totals.tot 
from pilot 
inner join 
(
    select 
    year(pilotstationdate) as yr, 
    month(pilotstationdate) as mth, 
    sum(pilotwaitingtime) as tot 
    from pilot 
    group by 
    year(pilotstationdate), 
    month(pilotstationdate) 
) totals 
    on year(pilot.pilotstationdate) = totals.yr 
    and month(pilot.pilotstationdate) = totals.mth 
0
select p.id_pilot, p.pilotstationdate, p.pilotwaitingtime, 
(select sum(pilotwaitingtime) 
    from pilot 
    where last_day(pilotstationdate)=last_day(p.pilotstationdate)) total 
from pilot p 

LAST_DAY() является функцией MySQL, которая возвращает последний день месяц.

Смежные вопросы