create table client (
client_id int,
name varchar(20)
);
insert into client values (1, 'Google');
insert into client values (2, 'Facebook');
create table client_log (
client_id int,
dt date,
status varchar(20)
);
insert into client_log values (1, '2014-01-01', 'Pending');
insert into client_log values (1, '2014-01-02', 'Approved');
insert into client_log values (2, '2014-01-03', 'Pending');
insert into client_log values (2, '2014-01-04', 'Declined');
I am trying to get the most recent status for each client. I am expecting a result set of:
| Google | Approved
| Facebook | Declined
I have reviewed the other SO questions like this, but they mostly use sub queries, and since my data is going to get very large I need to write this efficiently, which I think means using a join.
select c.name, cl.status
from client c
join client_log cl on cl.client_id = c.client_id
join client_log cl2 on cl2.client_id = cl.client_id
group by c.client_id
having cl.dt = max(cl2.dt)
Error: Unknown column 'cl.dt' in 'having clause'