我正在尝试创建查询,该查询将显示我最近2周内的股票表,股票名称,ID,日期,网址,价格和价格清单。
对于14天的历史,我在select上使用了group_concat的子查询。
但是当我使用group_concat时它返回所有结果并忽略我的限制,所以我创建了另一个子查询,它将是14个价格,group_concat将使它成为一个列表。
表'record_log'是所有股票的记录:
parent_stock_id - 此行所属的实际库存
价格 - 价格
search_date - 价格日期
第二个表是'股票':
id - 股票的身份
name,market_volume ....
问题在于:
在子子查询(SELECT的最后一行)中,当我过滤parent_stock_id = stocks.id时,他无法识别stocks.id,因为它属于主查询。
如何从顶部获取stock_id并将其传递给子子查询?或者可能是另一个想法?
SELECT
stocks.id AS stock_id,
record_log.price AS price,
record_log.search_date,
(SELECT GROUP_CONCAT(price) FROM (SELECT price FROM record_log WHERE parent_stock_id=stocks.id ORDER BY id DESC LIMIT 14) AS nevemind) AS history
FROM stocks
INNER JOIN record_log ON stocks.id = record_log.parent_stock_id
WHERE
record_log.another_check !=0
谢谢!
---我并不是真的将它用于股票,这只是最简单的解释方式:)
答案 0 :(得分:0)
一种方法是使用substring_index()
并消除额外的子查询:
SELECT s.id AS stock_id, rl.price AS price, rl.search_date,
(SELECT SUBSTRING_INDEX(GROUP_CONCAT(price ORDER BY id DESC), ',', 14)
FROM record_log rl2
WHERE rl2.parent_stock_id = s.id
) AS history
FROM stocks s INNER JOIN
record_log rl
ON s.id = rl.parent_stock_id
WHERE rl.another_check <> 0;
请注意,MySQL对group_concat()
中间结果(group_concat_max_len
)的长度有可设置的限制。此参数默认为1,024。