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 を選択するにはどうすればよいですか? 同様に、週の日次データ内の最後の _closes_price になるように _closes_price を選択するにはどうすればよいですか?

次に例を示します。

Google 株式市場データ - MSFT

2007 年 1 月 5 日に終了する週の場合、opening_price は 2007 年 1 月 3 日 (赤) から取得し、終値は 2007 年 1 月 5 日 (緑) から取得する必要があります。同様に、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 に答える