除非状态=来自hta表的OTD,否则我需要从上次发送中选择员工ID。然后,我需要从员工表中获取所有剩余的员工ID并显示这些结果。不幸的是,状态为otd的员工也在员工表中。我可以写一个会返回这些结果的查询吗?或者我必须采取不同的方式吗?如果是这样,你可以指导我。
SELECT h.employee_id
, MAX(h.delivery_date)
, e.employee_first
, h.status
FROM TABLE_HTA h
RIGHT
JOIN TABLE_EMPLOYEES e
ON h.employee_id = e.employee_id
WHERE h.status <> "OTD"
GROUP
BY h.employee_id
ORDER
BY MAX(h.delivery_date) ASC
Table_hta<br>
order_id | employee_id | status | delivery_date |<br>
1 | 23 | OTD | 1/1/15 3:45pm<br>
2 | 24 |DELIVER | 1/1/15 3:50pm<br>
3 | 25 |DELIVER | 1/1/15 3:51pm<br>
<br>
Table_employees<br>
employee_id | employee_first |<br>
23 Bob<br>
24 James<br>
25 Henry<br>
26 Sally<br>
Results<br>
employee_id | employee_first | delivery_date<br>
26 |Sally<br>
24 |James |1/1/15 3:50pm<br>
25 |James |1/1/15 3:51pm<br>
包括Sally,因为她没有OTD的身份。鲍勃被排除在外,因为他有OTD身份。
答案 0 :(得分:0)
如果在问题中包含CREATE TABLE和INSERT语句,您将获得更多更好的答案。
create table table_hta (
order_id integer primary key,
employee_id integer not null,
status varchar(10) not null,
delivery_date datetime not null
);
insert into table_hta values
(1, 23, 'OTD', '2015-01-01 3:45'),
(2, 24, 'DELIVER', '2015-01-01 3:50'),
(3, 25, 'DELIVER', '2015-01-01 3:51');
create table table_employees (
employee_id integer primary key,
employee_first varchar(10) not null
);
insert into table_employees values
(23, 'Bob'),
(24, 'James'),
(25, 'Henry'),
(26, 'Sally');
您感兴趣的员工
所有员工都在“table_employees”。例外情况在“table_hta”中。这将为您提供您感兴趣的员工。
select employee_id
from table_employees
where employee_id not in (select employee_id
from table_hta
where status = 'OTD');
我们可以直接使用WHERE子句。为了获得最大交货日期(顺便说一下,交货时间的名称很差),我们进行左连接以保留我们感兴趣的员工ID号。
select e.employee_id, e.employee_first, h.delivery_date
from table_employees e
left join (select employee_id, max(delivery_date) as delivery_date
from table_hta group by employee_id) h
on e.employee_id = h.employee_id
where e.employee_id not in (select employee_id
from table_hta
where status = 'OTD');
您对最大交货日期(交货时间)感兴趣的事实表明该表允许多个交货日期。如果它允许多个交付日期,它可能也允许这样的数据。
order_id | employee_id | status | delivery_date | 1 | 24 | OTD | 1/1/15 3:45pm 2 | 24 |DELIVER | 1/1/15 3:50pm
认真考虑在这种情况下你想要包括什么。