2014-04-27 46 views
0

按時間順序排序日期所以我創建了一個函數,它接受訂單日期並將其作爲下訂單的一週中的某一天返回,並對其進行測試我編寫了一條select語句來調用該函數。該函數與select語句一起工作,但是我希望按照時間順序列出星期幾的輸出。週一,週二,週三等。因爲現在它的輸出我相信訂單中的訂單是隨機的。我將如何重寫我的選擇語句?我試圖使用條款的順序,但它一直被表達錯誤 ...我的繼承人功能和select語句到目前爲止吐出的不是一組:通過函數

create or replace function DAY_ORD_SF 
(dtcreated date) 
return VARCHAR2 

is 

begin 

    RETURN TO_CHAR(dtcreated,'DAY'); 
end; 
/

,這是我的選擇語句:

SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders" 
    FROM BB_BASKET 
    GROUP BY DAY_ORD_SF(DTCREATED) 
    ORDER BY TO_CHAR(DTCREATED,'DAY') DESC; 

有人可以幫我選擇語句嗎?我已經嘗試了通過組前後的順序,但仍然拋出錯誤。

+0

請編輯你的問題,幷包括你得到的錯誤。 (順便說一下,ORDER BY應該跟在GROUP BY之後,就像你上面那樣)。謝謝。 –

+0

我的錯誤被列在解釋的段落中,並且該問題被張貼在select語句下..我繼續向你加上粗體,謝謝! – Jongu

+0

將ORDER BY更改爲'ORDER BY DAY_ORD_SF(DTCREATED)',看看是否有幫助。 –

回答

1

如果您呼叫的select的功能,然後使用該函數在group byorder by

SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders" 
FROM BB_BASKET 
GROUP BY DAY_ORD_SF(DTCREATED) 
ORDER BY TO_CHAR(MIN(DTCREATED), 'DAY') DESC; 

您還可以通過包括group by子句中的order by表達做到這一點:

SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders" 
FROM BB_BASKET 
GROUP BY DAY_ORD_SF(DTCREATED), TO_CHAR(DTCREATED,'DAY') 
ORDER BY TO_CHAR(DTCREATED,'DAY') DESC; 
0

請不要使用此功能。

不要按字符串排序(例如TO_CHAR),它只會按字母順序排序。

相反,你可以使用TRUNC將所有記錄某一天一起:

SELECT TO_CHAR(TRUNC(dtcreated),'DAY'), count(*) as "Number of Orders" 
FROM BB_BASKET 
GROUP BY TRUNC(dtcreated) 
ORDER BY TRUNC(dtcreated) DESC; 

這將按照從大到小的順序日期(最近日期優先)進行排序。