获取具有以下条件的mysql数据库中的记录列表:

时间:2012-12-30 12:12:28

标签: mysql sql

首先,我为模糊的问题标题道歉,我不知道该写些什么。请告诉我,我会更新。

现在在这里......     我有3个

Table   : target
Columns : target_id , target_employee_id, target_location_id, target_location_name, target_scheduled_on, target_exec_end_time, target_damaged, target_damaged_text


Table   : employee  
Columns : employee_id, employee_manager_id

Table   : location
Columns : location_id, location_name

小解释 - >管理者角色是为员工创建目标,这意味着新目标将具有位置名称和计划安排。然后,员工将访问该位置并报告是否有任何损坏。对于同一位置,这可能会在一个月内多次发生。

我需要展示的内容 - >具有损害的目标列表 - 在两个日期之间(target_exec_end_time),如果该位置有多个记录,则显示具有最大日期的记录。

更多解释 - >可以有多个具有相同位置的目标条目,但我只需要显示一个实例。 target table image

我尽力解释。提前谢谢。

3 个答案:

答案 0 :(得分:0)

这个怎么样:

 select * from target join employee on target.target_employee_id = employee.employee_id
     join location on target.target_location_name = location.location_name
     where target_exec_end_time between <start_date> and <end_date>
        and target_exec_end_time = (select max(target_exec_end_time) from location loc2
        where loc2.location_name = target.location_name)
     group by target.location_name;

不确定在哪里有target_exec_end_time条款。也许你只想要最大值?

答案 1 :(得分:0)

select t.target_location_name,case when t.target_damaged >0 
then t.target_damaged_text else 'Not Damaged' end target_damaged_text, 
max(t.target_exec_end_time) from target t
inner join employee e on t.target_employee_id=e.employee_id
inner join location l on t.target_location_id=l.location_id
where t.target_exec_end_time between 'DATE1' and 'DATE2'
group by t.target_id,t.target_damaged_text 

答案 2 :(得分:0)

SELECT MAX(target_exec_end_time), *
FROM target
WHERE target_damaged=1
    AND target_exec_end_time BETWEEN '2012-12-01' AND '2012-12-31'
GROUP BY target_location_id