2014-09-19 86 views
1

我得到了這樣的查詢如何獲得價值最高的排?

SELECT 
    IMAGE_PATH, IMAGE_ID, DOC_NID 
FROM 
    TBL_IMAGE WHERE IMAGE_ORD = 1 

並有後續條件

  • image_ord應該BR改爲image_ord =最大值
  • image_ord列號碼類型,它有一些重複
  • 我只需要一個最大值的image_ord
  • 它可以處理與rownum處理,但我不想因爲它有很多層(這是子查詢)

是否可以在沒有子查詢的情況下處理?

+0

這是不是很清楚,我:如果_「image_ord [...]有一些重複」 _和_你「只需要一排與image_ord的最大價值」 _你怎麼不同的區分具有相同最大'image_ord'的行? – 2014-09-19 08:43:20

+0

@SylvainLeroux它有幾行的值爲1.我知道這是錯誤的DB計劃,但它不是一個序列,只是數字類型列。無論如何,當我按'排序'時,第一行總是相同的。 – 2014-09-19 09:08:19

+0

'ORDER BY'是什麼?如果這是'ORDER BY IMAGE_ORG',那麼不應該依賴這樣的事實:對於_same_「IMAGE_ORG」值,以任何特定順序檢索行。 – 2014-09-19 09:28:53

回答

0

根據您的要求:

「image_ord [...]有一些重複」

「我只需要一排用的最大價值image_ord「

WITH C AS (SELECT MAX(IMAGE_ORD) M FROM TBL_IMAGE) 
SELECT 
    TBL_IMAGE.IMAGE_PATH, TBL_IMAGE.IMAGE_ID, TBL_IMAGE.DOC_NID 
FROM 
    TBL_IMAGE JOIN C ON IMAGE_ORD = C.M 
WHERE ROWNUM < 2 
  • WITH ...語句將獲取最大價值,爲image_ord
  • SELECT ...語句將臨時表上使用JOIN上述
  • WHERE ROWNUM < 2將結果的數量限制爲1排

請注意,如果沒有(明確的)ORDER BY子句,SELECT語句的結果應視爲無序的一組行。所以在重複的情況下,你不應該依賴任何特定的行(甚至是同一行)被返回。只需「一」行具有最大值image_ord價值。

+0

感謝您的回答。我也擔心image_ord值的重複,但我不知道如何避免這種情況。無論如何,我喜歡你的精彩答案,特別是使用'with'。這使得更清晰,更好:D非常感謝b – 2014-09-19 14:17:44

0

試試這個:

SELECT 
    IMAGE_PATH, IMAGE_ID, DOC_NID, Max(image_ord) 
FROM 
    TBL_IMAGE WHERE IMAGE_ORD = 1 group by IMAGE_PATH, IMAGE_ID, DOC_NID 
+0

那麼,如果你搜索'max(image_ord)',那麼'where image_ord = 1'語句不合適。 – yamny 2014-09-19 09:18:13

+0

那麼只要在這種情況下刪除條件可能會有所幫助? – 2014-09-19 09:21:24

0

我解決了我自己的問題跟隨查詢。 無論如何,我不得不使用子查詢,並添加一些額外的功能,在大括號中使用。

select 
    doc_nid, max(image_ord) as image_ord 
from 
    (
    select 
     doc_nid, nvl(image_ord, 0) as image_ord 
    from 
     tbl_image 
    where 
     doc_nid is not null 
) 
group by doc_nid