计算多年的价格年度回报

时间:2017-09-18 10:52:37

标签: sql oracle

我每天都有包含价格的行,例如股票价格或者士力架的价格并不重要

date = dd.mm.yyyy

row | date       | price
1   | 1.1.2015   | 23.3
2   | 4.5.2015   | 25.8
3   | 6.9.2015   | 27.3
4   | 31.12.2015 | 28.1
...
5   | 1.1.2016   | 28.1
6   | 7.10.2016  | 29.3
7   | 2.11.2016  | 30.3
8   | 31.12.2016 | 33.3
...
9   | 1.1.2017   | 33.3
10  | 3.1.2017   | 39.7
11  | 15.9.2017 | 41.2


在这个例子中,1.1和31.12之间的日期并不重要。我只关注一年中第一天的价格,然后是今年的最后一天。

示例结果将用于此数据:

row | year | return
1   | 2015 | 20%
2   | 2016 | 23%
3   | 2017 | 20%

如何将行分组为年,还可以计算具有日期的行之间的差异:当前年度的第一天1.1和31.12年的最后一天?

2 个答案:

答案 0 :(得分:0)

按年份分组,然后您可以找到一年中第一天的最高价格(<Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="Gray" Margin="-1 0 0 0" Width="1"/> )和一年中最后一天的最低价格(MAX( price ) KEEP ( DENSE_RANK FIRST ORDER BY year ))并计算这两个值之间的百分比增加:

MIN( price ) KEEP ( DENSE_RANK LAST  ORDER BY year )

答案 1 :(得分:0)

我想你只想要计算一年中第一年和最后一年的价值:

uint8_t GetByte(const char* pHexByte)
{
    char c = pHexByte[0];
    uint8_t Result = (c <= '9') ? c - '0' : c - '@';
    c = pHexByte[1];
    Result = (Result << 4) | (c <= '9') ? c - '0' : c - '@';
    return Result;
}

bool_t HexStringToBinary(uint8_t *pBinary, size_t BufferSize, const char*pHexString)
{
    while (pHexString[0] && pHexString[1])
    {
        uint8_t DataByte = GetByte(pHexString);

        if (!BufferSize) return FALSE;
        *pBinary++ = DataByte;
        BufferSize--;
        pHexString += 2;
    }

    return TRUE;
}

注意:这假定您需要数据中的第一天和最后一天,而不是1月1日和12月31日。