当前位置: 首页 > 知识库问答 >
问题:

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

赵志
2023-03-14

我正在使用Adaptive Server Enterprise/15.7/EBF 25127 SMP sp 136/P/x86 _ 64/Enterprise Linux/ase 157 sp 136 x/3955/64位/FBO/周一2015年10月19日19:12:00

我有一个表,包括多个日期和价格的记录,我希望选择最近的日期和价格是最高的或最大的。

对于错误消息,max()函数似乎不起作用,只会返回几十万条记录。当我尝试Row_number()或Rank()OVER(Partition by column name order by column name)时,我在OVER is incorrect附近收到一个语法错误。在读取其他线程时,看起来这在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

共有2个答案

后阳炎
2023-03-14
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
马梓
2023-03-14

不能使用 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
 类似资料:
  • 本文向大家介绍jQuery UI Library 设置日期选择器的最小和最大日期,包括了jQuery UI Library 设置日期选择器的最小和最大日期的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我试图一次从一张桌子上得到2行。上周的最小日期时间(今天-7)和最晚的日期(今天)的一个。 我的桌子: 我可以通过以下方式选择上周的数据: 但我只想要第1行和第125行,因为这些是用于计算的行。所以我的问题是: 如何从上一个查询的结果中选择2行(带有MIN和MAX日期)? 问题答案: 您可以使用此: 编辑: 由于两台计算机完全有可能具有相同的值,因此应更新查询以在子句中也包含过滤器。我

  • 问题内容: 我正在尝试制作类似提醒的应用程序。我想允许用户选择不是现在(至少从现在起5分钟)的日期和时间,并且我也想禁止用户选择距离太远的日期- 例如30天。我创建了datePicker和timePicker,使它们在单击按钮时弹出,但是找不到设置最小值和最大值的方法。 问题答案: 试试这个: 但是,您需要检查用户是否选择了今天的日期,并且时间是否小于当前时间条件。

  • 问题内容: 假设有工资表: 我目前正在使用此代码(AutoIT脚本: 因此,如果Hour_number在低小时或高小时之间,那两个查询是完美的。我需要某种查询,它基本上会执行以下操作: 然后将其重复为“默认”,因为找不到该员工。 补充:如果仅通过1个查询未找到$ Employee,是否可以尝试使用“ Default”? 问题答案: 如果仅通过1个查询未找到$ Employee,是否可以尝试使用“

  • 我想在hibernate中选择最大日期,但出现以下错误: Java语言sql。SqlSyntaxerRorexException:ORA-00932:不一致的数据类型:预期的时间戳得到的数字 查询是: 数据库是oracle。数据库中该字段的类型为时间戳(6)

  • 问题内容: 这是我的表结构- 我想清楚地选择所有的数据(以及日期)。由于日期在两个相同的条目之间会有所不同,因此我想选择日期最近的行。我希望得到这样的结果- 我不想要这个- 我正在使用此查询- 但是它只能挑一排。我该如何纠正? 问题答案: 试试这个查询 如果只想使用此查询: SQL字段 如果要查找所有用户的最新日期,请使用此查询 在此查询中,还将包含的数据