2016-12-15 133 views
2

我正在研究Adaptive Server Enterprise/15.7/EBF 25127 SMP SP136/P/x86_64/Enterprise Linux/ase157sp136x/3955/64位/ FBO/Mon 10月19日19:12:00 2015SQL Sybase ASE - 選擇最近的日期和最大價格

我有一個包含多個日期和價格的記錄的表,我期待選擇最近的日期和最高或最高的價格。

對於錯誤消息,max()函數似乎不起作用,只是返回了數十萬條記錄。當我嘗試Row_number()Rank()OVER(按列名排列按列名排序)我在附近收到語法錯誤OVER不正確。在閱讀其他線程時,它看起來像在Sybase ASE中不可用。

是否有另一種方法來實現這一目標?

ID  TRADE_DATE TRADE_PRICE 
B52A 05/12/2016 91 
B52A 05/13/2016 85 
B52A 05/13/2016 86 
B52A 05/16/2016 85 
B52A 05/16/2016 90 

期望輸出(每個記錄只有一行,無重複)::

實施例在表中的一個記錄的

ID  TRADE_DATE TRADE_PRICE 
B52A 05/16/2016 90 

我的代碼:

SELECT T1.ID 
FROM T1 

LEFT JOIN 
(SELECT 
    T2.ID, 
    T2.TRADE_DATE, 
    T2.TRADE_PRICE 
FROM T2 
WHERE ID='B52A') 
ON T2.ID=T1.ID 

另外,如果我試着做:

SELECT 
ID, 
MAX(TRADE_DATE), 
MAX(TRADE PRICE) 

FROM T2 
WHERE ID ='B52A' 

GROUP BY 
    ID 
ORDER BY 
    ID 
    TRADE_DATE 
    TRADE_PRICE 

它選擇正確的記錄,但它重複5次:

ID  TRADE_DATE TRADE_PRICE 
B52A 05/16/2016 90 
B52A 05/16/2016 90 
B52A 05/16/2016 90 
B52A 05/16/2016 90 
B52A 05/16/2016 90 

回答

0

您不能使用OVER語法,因爲SAP/Sybase ASE的數據庫不支持它。

您需要手動編寫SQL代碼。一個例子是:

SELECT 
    T1.ID, x.max_TRADE_DATE, max(TRADE_PRICE) AS max_TRADE_PRICE 
FROM 
(
    SELECT ID, MAX(TRADE_DATE) AS max_TRADE_DATE 
    FROM T1 GROUP BY ID 
) x 
JOIN 
    T1 on T1.ID = x.ID and T1.TRADE_DATE = x.max_TRADE_DATE 
GROUP BY 
    T1.ID, x.max_TRADE_DATE