Замечательная девушка-программист в своё время натаскивала меня на sql запросы. с тех пор я их делаю. ну как умею. Вот по таймшитовой надобности сделал запрос который считает разную статистику. Ну типа часы на разные работы в месяц, активные пользователи и т.д. А Чане запостил это дело в джаббер-конференцию.
chani: мона сюда запостить ?
hlomzik: а он такой огромный?
hlomzik: пость
chani: # Time: 090703 15:42:09
# User@Host: timesheet[timesheet] @ localhost [127.0.0.1]
# Query_time: 2 Lock_time: 0 Rows_sent: 42 Rows_examined: 374236
select users.user_index as user_index, tender_hours, bill_proj_hours, project_hours, all_hours, office_hours, workhours, all_hours / workhours AS FTEE, project_hours / bill_proj_hours AS BR from (select distinct user_index from timesteps where year(date)=2009 and month(date)=4) as users left join (SELECT DISTINCT sum( hours ) as tender_hours , user_index FROM timesteps WHERE year(date)=2009 AND month(date)=4 AND proj_index = ANY(SELECT proj_index FROM projects WHERE proj_type = 'tender') GROUP BY user_index) as tender ON users.user_index=tender.user_index left join (SELECT DISTINCT user_index, sum( hours ) AS bill_proj_hours FROM timesteps WHERE year(date)=2009 AND month(date)=4 AND (proj_index != 'unpaid_abs' AND proj_index != 'vacation') GROUP BY user_index) AS billable ON users.user_index=billable.user_index left join (SELECT DISTINCT sum( hours ) as project_hours , user_index FROM timesteps WHERE year(date)=2009 AND month(date)=4 AND proj_index = ANY(SELECT proj_index FROM projects WHERE proj_type = 'project') GROUP BY user_index) as projects ON users.user_index=projects.user_index left join (SELECT DISTINCT user_index, sum( hours ) AS all_hours FROM timesteps WHERE year(date)=2009 AND month(date)=4 GROUP BY user_index ) AS all_hours ON users.user_index = all_hours.user_index LEFT JOIN (SELECT sum( hours ) AS office_hours, user_index FROM timesteps WHERE proj_index = ANY(SELECT proj_index FROM projects WHERE proj_type ='office') AND year(date)=2009 AND month(date)=4 GROUP BY user_index) AS office ON users.user_index= office.user_index join (SELECT count( date ) *8 AS workhours FROM holydays WHERE year(date)=2009 AND month(date)=4 AND holyday = 'N') AS workhours;
SvartalF: Хоули щит
всегда живой: =O
всегда живой: O_O
chani: 15 секунд страничка собиралась
SvartalF: Не в битриксе работаешь? :)
chani: неее, вы что я ж чайник :-)
chani: а что есть битрикс ?
HyperGeek: вообще табличку с 60к записями джойнить уметь надо, чтоб сервак не повесить
hlomzik: chani: этим запросом ты хочешь захватить мир, я угадал?
HyperGeek: hlomzik: взорвать мозг)
hlomzik: chani: на 17-й строчке отчётливо видно, как ты присоединяешь Аляску
вот такие хохмочки.