gpt4 book ai didi

MySQL:在子子查询上使用主查询变量

转载 作者:行者123 更新时间:2023-11-29 17:58:23 25 4
gpt4 key购买 nike

我正在尝试创建查询,该查询将显示过去两周的股票表、股票名称、ID、日期、网址、价格和价格列表。

对于 14 天的历史记录,我在选择上使用了带有 group_concat 的子查询。

但是当我使用 group_concat 时,它会返回所有结果并忽略我的限制,因此我创建了另一个子查询,该子查询将是 14 个价格,而 group_concat 将使其成为一个列表。

表'record_log'是所有股票的记录:
Parent_stock_id - 该行所属的实际库存
价格-价格
search_date - 价格日期

第二个表是“股票”:
id - 股票的id
名称、市场交易量....

问题是这样的:
在子子查询(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

谢谢!

--- 我并没有真正将它用于股票,这只是最简单的解释方式:)

最佳答案

一种方法是使用 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。

关于MySQL:在子子查询上使用主查询变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48614575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com