我正在开发/15.7/EBF 25127 SMP SP136 /P/x86_64/Enterprise /ase157sp136x/3955/64位/FBO/Mon 19:12:00 2015
我有一个表,其中包括多个日期和价格的记录,我希望选择最近的日期和价格是最高或最高。
对于错误消息,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
发布于 2017-06-27 13:00:05
您不能使用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
发布于 2022-06-23 10:18:19
SELECT distinct * FROM (SELECT
ID,
MAX(TRADE_DATE) trade_date,
MAX(TRADE PRICE) trade_price
FROM T2
WHERE ID ='B52A'
GROUP BY
ID
)
ORDER BY
ID,
TRADE_DATE,
TRADE_PRICE
https://stackoverflow.com/questions/41156199
复制相似问题