0

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

现在它来了..
我有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

Little Explaination-> Managers 的角色是为员工创建一个目标,这意味着新目标将具有位置名称和预定时间。然后员工将访问该位置并报告是否有任何损坏。对于同一个位置,这可能会在一个月内发生多次。

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

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

我已经尽力解释了。提前致谢。

4

3 回答 3

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子句都放在 where 中。也许您只想要最大值?

于 2012-12-30T12:17:48.470 回答
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 
于 2012-12-30T12:25:42.243 回答
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
于 2012-12-30T12:25:51.760 回答