2009-10-02 27 views
2

我想返回一個日期列表。每行都有多個日期連接爲單個字符串。我想按行中的最短日期排序。我該如何「按分(子查詢)」排序?

這裏是我的查詢:

SELECT br.bm_tracking_number, 
     (SELECT TOLIST(APPT.fact_date) 
      FROM bm_fact APPT 
      WHERE APPT.bm_review_sk = br.bm_review_sk 
      AND APPT.fact_type_code=183050) "Appointments" 
    FROM BM_REVIEW br 
    WHERE row_delete_date_time IS NULL 
ORDER BY MIN(SELECT APPT.fact_date 
       FROM bm_fact APPT 
       WHERE APPT.bm_review_sk = br.bm_review_sk 
       AND APPT.fact_type_code = 183050); 

我得到由線數量級的Oracle錯誤(00936缺少表達)。是否有另一種方法來完成我想要做的事情?

回答

3

此:

SELECT br.bm_tracking_number, 
     TOLIST(bf.fact_date) 
    FROM BM_REVIEW br 
    JOIN BM_FACT bf ON bf.bm_review_sk = br.bm_review_sk 
        AND bf.fact_type_code = 183050 
    WHERE br.row_delete_date_time IS NULL 
GROUP BY br.bm_tracking_number 
ORDER BY MIN(bf.fact_date) 

...會給你一個列表,由fact_date升序排列。

+0

不應該有[GROUP BY br.bm_tracking_number]在那裏嗎?然後[ORDER BY MIN(bf.fact_date)]? – MatBailie 2009-10-02 17:30:42

+0

@Dems:正確,增加了缺少的GROUP BY。 – 2009-10-02 17:32:53

+0

您仍然需要ORDER BY中的MIN()聚合,因爲您沒有按該字段分組。 – MatBailie 2009-10-02 17:35:13

0

只能看一下它,但有一點是你沒有在子查詢中將bm_fact替換爲APPT。


編輯:

好吧,你固定的。

如何將MIN()放入子查詢中?

ORDER BY (SELECT MIN(APPT.fact_date) ...) 
+0

D'oh!我修正了這一點。它在SQL Developer中正確別名。我無法複製和粘貼,因爲它在安全的網絡上。還有其他建議嗎? – Theresa 2009-10-02 17:28:40

+0

將MIN放入子查詢中也起作用。但是,Rexem的查詢似乎運行得更快,所以我將其標記爲接受的答案。謝謝,德姆斯! – Theresa 2009-10-02 17:56:30