我有一个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?
以下是一个例子:
截至2007-01-05的一周,开盘价应取自2007-01-03(红色),收盘价应取自2007-01-05(绿色)。同样,截至2007-01-12的一周,开盘价应为2007-01-08,收盘价为2007-01-12。
答案 0 :(得分: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