【发布时间】:2012-11-12 20:15:47
【问题描述】:
我有一张包含产品、日期/时间和价格的表格。我将日期/时间拆分到另一列,我刚刚拆分了小时部分。我需要按小时查找价格值的高点/低点/开盘价/收盘价。我可以通过在 max()/min() 的选择部分中进行子选择并按产品和小时加入数据来轻松获得高/低。我现在需要打开/关闭,这将是每小时的第一条记录和每小时的最后一条记录。每小时的每条记录的高/低/开/关都应该相同。
示例结果。请注意所有 7 小时记录的最高价是 55,这就是所有 7 小时记录中的最高价,最低价是 30,因为它是所有 7 小时记录中的最低价,50 是开盘价,因为第一个价格(按日期/时间排序at 7:15) 是 50。收盘价是按日期/时间排序的一小时内的最后一个价格,即 30。
Product, Date, Hour, Price, High, Low, Open, Close
A, 11/12/2012 7:15, 7, 50, 55, 30, 50, 30
A, 11/12/2012 7:28, 7, 55, 55, 30, 50, 30
A, 11/12/2012 7:30, 7, 40, 55, 30, 50, 30
A, 11/12/2012 7:35, 7, 45, 55, 30, 50, 30
A, 11/12/2012 7:55, 7, 30, 55, 30, 50, 30
所以再次回顾一下,高/低很容易,因为我在选择部分中对同一个表进行最大/最小查询的子选择,但不知道如何为打开/关闭做同样的事情以获得第一个和基于日期/时间字段的最后记录。
【问题讨论】:
-
为定价表设置每小时更新 ;) 无论如何,请发布您目前拥有的任何代码。如果您传入表的记录按时间顺序排列。例如下午 1 点的第一条记录是开放的。然后在 60 分钟后,您可以检查哪条记录(即您的收盘价)。一般来说,每个价格变动都附有一个时间。那是怎么回事? :)
-
所以这是历史数据,不是实时的,所以我有所有的时间。我通过 sql 询问如何获得给定小时内所有记录的第一个和最后一个。例如我有: select price, (select max(price) from price_tbl j where i.product = j.product and i.hr = j.hr) high from price_tbl i 我对 min 做同样的事情,但是第一个如何和最后一个记录。如果 oracle 有一个 first() 和 last() 这会很容易:)