2014-02-23 24 views
-1

我找不到一种方法,通过加入同一个表并获取同一个ID的timestamp列的最小值和最大值在新行的结果加入相同的表格,并通过单独的行ID获取时间戳的最大值和最小值

例如

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

您没有加入同一个表。按名称和ID分组您的行。然后,查找每行的“日期”列的最大值和最小值。 –

+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

编辑 - 如果你想使用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

会简单MINMAX做的工作或有更复杂的要求?

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

编辑:可以做到这样:

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号(最低)的两次。 –

相关问题