2014-02-23 3 views
-1

Я не мог найти способ получить минимальное и максимальное значение столбца timestamp для того же идентификатора, присоединившись к той же таблице и показывая результат на новой строкеПрисоединитесь к той же таблице и получите максимальное и минимальное значение метки времени по идентификатору в отдельных строках.

Например

No | Name | Date 
1 John 01/01/2010 
4 Chris 01/02/2009 
1 John 01/01/2011 
6 Alex 02/02/2010 
1 Alex 01/01/2012 
4 Norman 01/03/2012 
6 Joshua 03/02/2012 

I should somehow get : 
No | Name | Date 
1  John  01/01/2010 
1  Alex  01/01/2012 
4  Chris 01/02/2009 
4  Norman 01/03/2012 
6  Alex  01/01/2012 
6  Joshua 03/02/2012 
+0

Вы не должны присоединиться к той же таблице. Группируйте свои строки по имени и идентификатору. Затем найдите max и min столбца «Date» для каждой строки. –

+0

Я знаю, как получить такие значения, но мне нужно использовать JOIN для обучения. – user3341031

ответ

0

Это даст вам точный вывод, который вы хотите:

select no, name, date 
    from temp t 
where date = (select min(x.date) from temp x where x.no = t.no) 
    or date = (select max(x.date) from temp x where x.no = t.no) 
order by no, date 

SQL скрипку демо : http://sqlfiddle.com/#!3/8243c/6/0

Edit - Если вы хотите использовать JOIN:

select t.no, t.name, t.date 
    from temp t 
    join (select no, min(date) as min_date, max(date) as max_date 
      from temp 
     group by no) x 
    on (t.no = x.no and t.date = min_date) 
    or (t.no = x.no and t.date = max_date) 
order by t.no, t.date 

http://sqlfiddle.com/#!3/8243c/19/0

(тот же результат)

0

бы простой MIN и MAX сделать работу или есть более сложное требование?

SELECT no, name, MIN(date) as MinDate, MAX(date) as MaxDate 
FROM temp t 
GROUP BY no, name 
ORDER BY no 

демо здесь: http://sqlfiddle.com/#!3/8243c/3

Edit: можно сделать так:

select t.no, name, mindate, maxdate 
from temp t 
left join (select min(date) as mindate, no 
      from temp 
      group by no) t2 on t.no = t2.no 
left join (select max(date) as maxdate, no 
      from temp 
      group by no) t3 on t.no = t3.no 
+0

Я знаю, как получить такие значения, но мне нужно использовать JOIN для обучения. – user3341031

+0

@ user3341031 Я дал вам ответ, который использует JOIN выше. –

+0

Запрос, который использует левое соединение, не будет работать. Джон возвращается дважды, потому что он на столе 3 раза, и у него минимальное значение даты для № 1. Таким образом, он дважды перечисляется за № 1 (как минимум). –