J'ai une table DB "entrées" avec des journaux de temps des employés.
SELECT MONTH(FROM_UNIXTIME(logged_at)), YEAR(FROM_UNIXTIME(logged_at)), SUM(hours) FROM dpd_harvest_entries GROUP BY MONTH(FROM_UNIXTIME(logged_at)), YEAR(FROM_UNIXTIME(logged_at))
3 Réponses :
Je suppose que vous avez des tâches code> avec la colonne
facturable code> qui détient 1 pour les tâches facturables et 0 pour des tâches non facturables. Ensuite, votre requête pourrait ressembler à:
SELECT
MONTH(FROM_UNIXTIME(logged_at)),
YEAR(FROM_UNIXTIME(logged_at)),
SUM(hours) total,
SUM(IF(task_id IN ({your id list}),hours,0)) billable,
SUM(IF(task_id IN ({your id list}),0,hours)) nonbillable
FROM dpd_harvest_entries e
GROUP BY
MONTH(FROM_UNIXTIME(logged_at)),
YEAR(FROM_UNIXTIME(logged_at))
Cela devrait fonctionner ..
select a.month, a.year, (billable + non_billable) total, billable, non_billable from (select month, year, sum(hours) billable from dpd_harvest_entries where task_id in (2, 3) group by month, year) a, (select month, year, sum(hours) non_billable from dpd_harvest_entries where task_id in (1)) group by month, year) b where a.month = b.month and a.year = b.year
Vous auriez besoin de 2 sous-titres (facturables et non facturables), avez un mois d'année de colonne dans les deux, puis rejoignez-les dans votre colonne de mois d'année pour les réunir, quelque chose comme ceci:
SELECT billable.year_month as year_month, billable.sum_hours as billable_hours, non_billable.sum_hours as non_billable_hours, (billable.sum_hours + non_billable.sum_hours) as total_hours FROM (SELECT DATE_FORMAT(FROM_UNIXTIME(logged_at), '%Y-%m') as year_month, SUM(hours) as sum_hours FROM dpd_harvest_entries WHERE task_id IN (1,2,3) GROUP BY 1) as billable, (SELECT DATE_FORMAT(FROM_UNIXTIME(logged_at), '%Y-%m') as year_month, SUM(hours) as sum_hours FROM dpd_harvest_entries WHERE task_id IN (4,5,6) GROUP BY 1) as non_billable LEFT JOIN billable on billable.year_month = non_billable.year_month