Oracle 自定義排序方式
阿新 • • 發佈:2019-01-24
-- Start
首先準備下面的測試資料。
CREATE TABLE price ( id NUMBER(10, 0), price_source VARCHAR(10), price NUMBER(30, 6), enter_date_time TIMESTAMP ); INSERT INTO price VALUES (1, 'NYSE', 8.88, TIMESTAMP '2015-02-12 10:00:00.000'); INSERT INTO price VALUES (1, 'NASDAQ', 8.89, TIMESTAMP '2015-02-12 09:00:00.000'); INSERT INTO price VALUES (1, 'LSE', 8.90, TIMESTAMP '2015-02-12 13:00:00.000');
對於一支股票,不同的交易所提供的價格稍有差異,假設現在讓我們查詢一下某隻股票的價格,如果紐交所(NYSE)提供了價格,則以它的為準,否則取最新的價格。該怎麼排序呢?按照 price_source 排序?顯然不對。答案是建立比較列。
SELECT price FROM ( SELECT price, CASE price_source WHEN 'NYSE' THEN 1 ELSE 0 END AS ORDER_COL FROM price WHERE id = 1 ORDER BY ORDER_COL DESC, enter_date_time DESC ) WHERE ROWNUM = 1;
或者直接在排序中使用 CASE WHEN.
SELECT price FROM (
SELECT
price
FROM
price
WHERE
id = 1
ORDER BY
CASE price_source WHEN 'NYSE' THEN 1 ELSE 0 END DESC,
enter_date_time DESC
) WHERE ROWNUM = 1;
-- 宣告:轉載請註明出處
-- Last edited on 2015-02-12
-- Created by ShangBo on 2015-02-12
-- End