Ubuntu で MySQL バージョン 5.5 を使用しています。
私のデータベーステーブルは次のように設定されています:
DDL:
CREATE TABLE 'asx' (
'code' char(3) NOT NULL,
'高' 10 進数 (9,3)、
'低' 10 進数 (9,3)、
'閉じる' decimal(9,3),
'histID' int(11) NOT NULL AUTO_INCREMENT,
主キー ('histID'),
UNIQUE KEY 'コード' ('コード')
)
CREATE TABLE 'asxhist' (
'日付' 日付 NOT NULL,
'平均' decimal(9,3),
'histID' int(11) NOT NULL,
PRIMARY KEY ('日付','histID'),
キー 'histID' ('histID'),
制約 'asxhist_ibfk_1' 外部キー ('histID') 参照 'asx' ('histID')
更新カスケード時
)
t1:
| | コード | 高い | 低い | 閉じる | histID (主キー)|
| | アスクス | 10.000 | 9.500 | 9.800 | 1
| | ナブ | 42.000 | 41.250 | 41.350 | 2
t2:
| | 日付 | 平均 | histID (外部キー) |
| | 2013-01-01| 10.000 | 1 |
| | 2013-01-01| 39.000 | 2 |
| | 2013-01-02| 9.000 | 1 |
| | 2013-01-02| 38.000 | 2 |
| | 2013-01-03| 9.500 | 1 |
| | 2013-01-03| 39.500 | 2 |
| | 2013-01-04| 11.000 | 1 |
| | 2013-01-04| 38.500 | 2 |
結果としてこれを生成する選択クエリを完了しようとしています:
| | コード | 高い | 低い | 閉じる | asxhist.平均 |
| | アスクス | 10.000 | 9.500 | 9.800 | 11.000、9.5000 |
| | ナブ | 42.000 | 41.250 | 41.350 | 38.500,39.500 |
テーブル 2 の最新情報は、csv 形式でテーブル 1 と共に返されます。私はここまで到達することができました:
SELECT code, high, low, close,
(SELECT GROUP_CONCAT(DISTINCT t2.average ORDER BY date DESC SEPARATOR ',') FROM t2
WHERE t2.histID = t1.histID)
FROM t1;
残念ながら、これは hID に関連付けられたすべての値を返します。私は xaprb.com の firstleastmax-row-per-group-in-sql ソリューションを見ていますが、一日中頭をぶつけていて、わずかなぐらつきのせいで、それをどのように使用するべきかを理解する能力が薄れているようです。利点。結果を最新の 5 つの値に制限し、テーブルのサイズが最終的にメガバイトになることを考慮して、O(n 2 ) 以下を維持するにはどうすればよいですか? (または私はできますか?)