我在Ubuntu上使用MySQL 5.5版本。
我的数据库表是设置如下:SQL算法尽可能接近线性时间并调整select语句
DDLs: CREATE TABLE 'asx' ( 'code' char(3) NOT NULL, 'high' decimal(9,3), 'low' decimal(9,3), 'close' decimal(9,3), 'histID' int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY ('histID'), UNIQUE KEY 'code' ('code') ) CREATE TABLE 'asxhist' ( 'date' date NOT NULL, 'average' decimal(9,3), 'histID' int(11) NOT NULL, PRIMARY KEY ('date','histID'), KEY 'histID' ('histID'), CONSTRAINT 'asxhist_ibfk_1' FOREIGN KEY ('histID') REFERENCES 'asx' ('histID') ON UPDATE CASCADE ) t1: | code | high | low | close | histID (primary key)| | asx | 10.000 | 9.500 | 9.800 | 1 | nab | 42.000 | 41.250 | 41.350 | 2 t2: | date | average | histID (foreign key) | | 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 | I am attempting to complete a select query that produces this as a result: | code | high | low | close | asxhist.average | | asx | 10.000 | 9.500 | 9.800 | 11.000, 9.5000 | | nab | 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的第一个最大行数每组在sql的解决方案,但我整天都在b my我的脑袋,而这种轻微的w seems似乎在淡化我理解我应该如何使用它的能力效益。我怎样才能将结果限制到最近的5个值,并且考虑到这些表最终会是兆字节大小,请尝试并保留在O(n )或更少? (或者可以吗?)
我不明白你的数据的表示。考虑提供适当的'DDL'。 – Strawberry
...具有正确代表性的数据。 – Strawberry
K我将在DDLs上工作,同时填写更多内容以使其更清晰 – aarontt