3

我有一个 MySql 表,其中包含按以下顺序排列的每日股市数据:

_date, _opening_price, _high_price, _low_price, _close_price

我正在尝试使用以下方法将这些数据转换为每周数据:

SELECT
MAX(_date) AS _date,
WEEK(_date) AS weeknum,
_opening_price,
MAX(_high_price) AS _high_price,
MIN(_low_price) AS _low_price,
_closing_price
FROM myTable
GROUP BY weeknum ORDER BY _date;

如何选择 _opening_price 使其成为该周每日数据中的第一个 _opening_price?同样,如何选择 _closing_price 使其成为一周每日数据中的最后一个 _closing_price?

这是一个例子:

谷歌股票市场数据 - MSFT

对于 2007-01-05 结束的一周,opening_price 应取自 2007-01-03(红色),收盘价应取自 2007-01-05(绿色)。同样,对于 2007 年 1 月 12 日结束的一周,开盘价应为 2007 年 1 月 8 日,收盘价应为 2007 年 1 月 12 日。

4

1 回答 1

1

试试这个解决方案:

SELECT 
    MAX(a._date) weekending, 
    MAX(CASE WHEN a._date = b.mindate THEN a._opening_price END) openingprice,
    MAX(CASE WHEN a._date = b.maxdate THEN a._closing_price END) closingprice
FROM myTable a
INNER JOIN
(
    SELECT 
        CONCAT(YEAR(_date), '-', WEEK(_date)) weeknum, 
        MIN(_date) mindate, 
        MAX(_date) maxdate
    FROM myTable
    GROUP BY weeknum
) b ON a._date IN (b.mindate, b.maxdate)
GROUP BY b.weeknum
于 2012-07-12T23:10:50.753 回答