【发布时间】:2020-07-25 00:04:48
【问题描述】:
我正在创建一个交易平台,我需要从一个表格中带来以下数据:
date, open price, close price, highest price, lowest price, volume, value of volume.
我创建了这个查询:
Select
min(Price) as Low,
max(price) as High,
sum(Quantity) as Volume,
sum(Price) as Value,
dateadd(DAY, 0, datediff(day, 0, CreatedOn)) as Date,
CompanyIdentifier
from
Transactions
group by
dateadd(DAY, 0, datediff(day, 0, CreatedOn)), CompanyIdentifier
这个查询是为某公司(由CompanyIdentifier标识)在某天(Date)带来最低价格,最高价格,数量和数量的价值。我不能在这个查询中添加的是该公司当天的开盘价和收盘价。基本上是数据按日期升序排列的前 1 个价格。我尝试过并且似乎可以解决问题的是以下查询:
SELECT *
FROM (select Quantity, PRICE, CompanyIdentifier,
dateadd(DAY,0, datediff(day,0, CreatedOn)) AS U,
ROW_NUMBER() over(partition by CompanyIdentifier, dateadd(DAY,0, datediff(day,0, CreatedOn)) order by CREATEDON) AS 'COUN'
from Transactions
) AS AL
where COUN = 1
但这是 2 个单独的查询,我只想要一个查询。我还尝试添加:
FIRST_VALUE(Price) over (order by price) as first
在第一个查询中,但我收到该函数不在 group by 子句中的错误,我将函数添加到 group by 查询中,我收到以下错误:
窗口函数只能出现在 SELECT 或 ORDER BY 子句中。
那么,如何在第一个查询中添加这两列?
【问题讨论】:
-
添加一些示例数据以及您的预期输出。
-
这是我现在收到的:imgur.com/a/u4VSFKZ 我想在这些列旁边再添加 2 列:起始价和收盘价。基本上为每个公司带来第一个价格和最后一个价格每个日期由 CompanyIdentifier 表示(按日期表示)
-
您没有基于您发布的图片的开盘价或收盘价,因为时间部分始终设置为 00:00。表格中也没有“第一”或“最后”行。根据定义,表中的行没有特定的顺序,当然也不是您可以依赖的。
-
是的,时间组件设置为 00:00 以便能够按天对数据进行分组。但是在数据库中,时间组件也有小时、分钟和秒。我知道有根据定义,表格中没有顺序,但根据数据字段,我可以按 asc order 或 desc 对它们进行排序并选择 top 1。问题是数据已分组,我无法使用 top 1 函数来获取第一个或最后一个价格一天之内。
标签: sql sql-server