2014-04-29 32 views
-1

這是一個有趣的也許是很好的一般問題。我如何找到特定表中與ID相對應的最小時間值。很難沒有一個例子來解釋,因此在這裏是一個:SQL - 在表格字段和聯接字段中查找最小值

  • 表A已經字段ID,stage1_date,stage2_date
  • 表B1具有字段A_ID(FK到A.ID),日期
  • 表B2具有字段A_ID(FK到A.ID),日期

我想找到A. A.stage1_date,A.stage2_date,B1.date,B2.date中每個ID的最小值

任何想法的人?

+0

什麼平臺,這是對? – Hogan

+0

這實際上是在vertica – SS781

回答

4

不幸的是,least()函數返回NULL如果它的任何參數是NULL。而且,如果其中一個B表缺少A_ID,您可能希望使用左外連接來達到此目的。

這裏是一個更安全的方法:

select id, min(thedate) as mindate 
from (select id, stage1_date as thedate from a union all 
     select id, stage2_date from a union all 
     select a_id, date from b1 union all 
     select a_id, date from b2 
    ) t 
group by id; 
+0

好吧這看起來很有前途,我將不得不測試,並讓你知道它的票價 – SS781

+0

我也試過嵌套查詢與工會來解決,但這個def看起來工作出一些事情,我無法找出 – SS781

+0

@ SS781。 。 。什麼是問題?這個查詢看起來很容易。 –

1

可以使用LEAST()函數表達式的列表返回最小的值:

SELECT 
    LEAST(A.stage1_date, A.stage2_date, B1.date, B2.date) 
FROM 
    A JOIN B1 ON A.ID = B1.A_ID 
     JOIN B2 ON A.ID = B2.A_ID 
+0

你有一個錯字,在Oracle上也不是最少的? – Hogan

+1

好吧,所以我真的不知道有最少的功能,這是超級有用的...我試圖解決這個與多個工會的兩個嵌套子查詢 – SS781

+1

我相信至少適用於vertica:https://my.vertica .com/docs/6.1.x/HTML/index.htm#11792.htm – SS781