2014-09-04 20 views
-4

我寫一個查詢,我整理我的第一唯一標識符的數據對一個人,那麼創建日期...如何只得到一個特定列的第一個實例在Oracle

所以每個新的實例唯一的ID我只想要那一行..其餘的可以扔掉。我試過一個嵌套的select語句:

SELECT d.full_name as "Name", 
     d.id as "Unique Identifier", 
     s.service_name as "service", 
     t.create_date as "date created" 
     from 
     data d, 
     transaction t, 
     system s 
     where 
     ... 
     s.system = 251 
     order by d.id, t.create_date desc 

我每次都得到一個錯誤,因爲我假設我沒有正確使用組。什麼是最好的方式來獲得一個新的唯一標識符的第一個實例,並把其餘的扔掉?

編輯:

下面是一些樣本數據:

Name   Unique Identifier  service   date created 

john doe  1      eca    1/14/2008 
john doe  1      ecb    1/10/2008 
john doe  1      eca    11/12/2007 
henry ford 2      ford1   06/07/2010 
henry ford 2      ford2   08/09/2009 
jack johnson 4      burgers1   11/01/2013 
jack johnson 4      burgers2   09/06/2007 

所以我要的是這些行打印:

john doe  1      eca    1/14/2008 
henry ford 2      ford1   06/07/2010 
jack johnson 4      burgers1   11/01/2013 

,也就是每每個人最近的請求。但每一行仍然可能有不同的數據。

+1

你能提供從表和您預期的結果基於對樣本採樣數據的一對夫婦行? – 2014-09-04 23:17:13

+0

我添加了一些示例數據brian – eaglei22 2014-09-05 13:46:39

回答

1

如果我正在讀你的問題正確,我相信你想每個唯一的ID第一行?

編輯:當你添加樣本數據時,它變得更容易理解你想要什麼。

由於您還沒有添加數據庫結構,我的查詢只涉及一個表格,而不是三個作爲示例查詢,因爲我無法知道它們是如何連接的。儘管將查詢適配到正確的表和連接應該很容易。

下面的查詢應該這樣做:

SELECT 
    t1.full_name AS "Name", 
    t1.id AS "Unique Identifier", 
    t1.service_name AS "Service", 
    t1.create_date AS "Date created" 
FROM table1 t1, 
    (SELECT id, MAX(create_date) AS last_date 
    FROM table1 
    GROUP BY id) t2 
    WHERE t1.id = t2.id 
    AND t1.create_date = t2.last_date 
ORDER BY t1.id 

爲一個例子見this sample SQL Fiddle(的Oracle 11g R2)。

從上面的查詢輸出:

|   NAME | UNIQUE IDENTIFIER | SERVICE |     DATE CREATED | 
|--------------|-------------------|----------|---------------------------------| 
|  john doe |     1 |  eca | January, 14 2008 01:00:00+0000 | 
| henry ford |     2 | ford1 |  June, 07 2010 02:00:00+0000 | 
| jack johnson |     4 | burgers1 | November, 01 2013 01:00:00+0000 | 
+0

謝謝,這有很大的幫助。在嘗試對需求進行排序時,這似乎變得非常複雜。我對SQL的使用經驗有限,但我只需要展示如何做這樣的事情,而max()分組更有意義。雖然,當我在日期使用max()時,它似乎有很多日期,對用戶來說也是一樣的。有一個排隊引擎可以運行和關閉門票,所以這就是爲什麼..但是有沒有更好的方法來獲得最大日期?也許它只是比較它到第二個 – eaglei22 2014-09-05 18:12:46

+0

@ user1794106我不知道我明白你的意思。 MAX(日期)將返回最後一個日期,並且如果有多個具有相同日期的行並不重要。 – jpw 2014-09-05 20:30:34

相關問題