2016-12-27 5 views
0

У меня ниже три таблицы:Как написать этот сложный запрос MySQL, используя три таблицы?

  1. задача - Таблица TASK_ID, activity_id (внешний ключ), start_date, end_date

  2. активность стол - activity_id, milestone_id (FOREIGN KEY), other_fields

  3. Milestone стол - milestone_id, project_id, other_fields

Теперь я хочу привести s и др, как этот

No_of_task(count) | no_activity | milestone_name 
     5   :  2  : ABC Milestone 

Я хочу считать end_dated задачу, рассчитывать активность базы на датой_окончания задачи и имя вехи.

Например, 1 веха имя Housing_Construction, который имеет 5 активность и 20 другая задача ... некоторые задачи end_dated так

5 завершения задачи 3 деятельности housing_construction, как это.

Задача Таблица Описание

+-----------------------+-------------+------+-----+---------+----------------+ 
| Field     | Type  | Null | Key | Default | Extra   | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| activity_task_id  | int(11)  | NO | PRI | NULL | auto_increment | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| milestone_activity_id | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| task     | varchar(50) | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| description   | text  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| assign_to_employee_id | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| assign_date   | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| task_end_date   | date  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| tasktime    | varchar(50) | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| status    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| is_delete    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| entry_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| edit_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| createddatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| modifydatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| nooftimesedit   | smallint(6) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| completion_date  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 

ActivityTable Описание

+-----------------------+-------------+------+-----+---------+----------------+ 
| Field     | Type  | Null | Key | Default | Extra   | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| milestone_activity_id | int(11)  | NO | PRI | NULL | auto_increment | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| project_milestone_id | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| activityname   | varchar(50) | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| activity_end_date  | date  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| activity_description | text  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| status    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| is_delete    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| entry_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| edit_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| createddatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| modifydatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| nooftimesedit   | smallint(6) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 

Описание вехой Таблица

+-----------------------+-------------+------+-----+---------+----------------+ 
| Field     | Type  | Null | Key | Default | Extra   | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| project_milestone_id | int(11)  | NO | PRI | NULL | auto_increment | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| project_id   | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| milestone    | varchar(50) | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| milestone_description | text  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| milestone_end_date | date  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| status    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| is_delete    | tinyint(1) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| entry_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| edit_employee_id  | int(11)  | YES | MUL | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| createddatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| modifydatetime  | datetime | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| nooftimesedit   | smallint(6) | YES |  | 0  |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 
| noofdays    | int(11)  | YES |  | NULL |    | 
+-----------------------+-------------+------+-----+---------+----------------+ 

ответ

0

Попробуйте это:

select 
    count(distinct t.activity_task_id) No_of_task, 
    count(distinct a.milestone_activity_id) no_activity, 
    m.milestone_description milestone_name 
from milestone m 
inner join activity a 
    on m.project_milestone_id = a.project_milestone_id 
inner join task t 
    on a.milestone_activity_id = t.milestone_activity_id 
where t.status != 4 
and t.task_end_date < curdate() 
group by m.project_milestone_id, 
    m.milestone_description; 
+0

спасибо за комментарий, но куда положить конец даты условие в запросе? – Hardik

+0

выберите t.count в No_of_task из (SELECT COUNT (activity_task_id) отсчитываются от activity_task_details где статус! = 4 и task_end_date Hardik

+0

@hardik смотрите обновленный ответ 't.end_date' – GurV

0

Вы можете использовать JOIN для этой цели, используйте этот следующий код,

SELECT COUNT(T.task_id) as no_of_task, 
     COUNT(A.activity_id) as no_of_activity, 
     MAX(M.milestone_name) as milestone_name 
FROM milestone M 
INNER JOIN activity A on M.milestone_id=A.milestone_id 
INNER JOIN task T on T.activity_id =A.activity_id 
GROUP BY A.activity_id,T.task_id 
HAVING T.end_date < curdate() 
+0

спасибо за ответ, я попробую это, но где поставить условие устаревшей задачи? есть два поля в дате начала задачи и дате окончания, мне нужно, чтобы счет задачи закончился – Hardik

+0

после 'GROUP BY', вы можете поместить так:« HAVING [значение1] = 1' –

+0

выберите t.count как No_of_task от (SELECT COUNT (activity_task_id) count from activity_task_details, где status! = 4 и task_end_date Hardik

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