SQL Sybase ASE - 选择最新的日期和最高价格

时间:2016-12-15 03:59:22

标签: sql max sybase partitioning sybase-ase

我正在开发 Adaptive Server Enterprise / 15.7 / EBF 25127 SMP SP136 / P / x86_64 / Enterprise Linux / ase157sp136x / 3955/64位/ FBO / Mon Oct 19 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

1 个答案:

答案 0 :(得分: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