MySql - 选择第一行和最后一行(不是最小值/最大值)

时间:2012-07-12 22:28:51

标签: mysql

我有一个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?

以下是一个例子:

Google Stock Market Data - MSFT

截至2007-01-05的一周,开盘价应取自2007-01-03(红色),收盘价应取自2007-01-05(绿色)。同样,截至2007-01-12的一周,开盘价应为2007-01-08,收盘价为2007-01-12。

1 个答案:

答案 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
相关问题