2014-02-23 25 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號(最低)的兩次。 –

相關問題