2016-04-06 51 views
1

当前SQL代码列是:SQL:子查询?拉使用情况

SELECT k.id, k.symbol, y.close, y.volume, 
((y.close/y.close_adj_previous_day)-1) AS percent_change 
     FROM symbols k 
     JOIN stocks y ON k.id = y.id 
    WHERE 
     k.t_removed = 0 
     AND t = '$max_t' 
    ORDER BY percent_change DESC 
    LIMIT 10 

试图让close_adj_previous_day。目前我使用另一个查询来获取close_adj_previous一天这样的:

 SELECT k.close_adj AS close_adj_previous_day 
     FROM stocks k 
     WHERE 
      k.id = '$id' 
      AND k.t = '$max_t_minus_one' 
     LIMIT 1 

我将如何组合这些查询,得到的结果进行排序的顶级查询?谢谢你们/加尔斯。从表

半例如:

Example Table Kind Of

+0

样本数据和所需的结果将有助于您的查询。 –

+0

我添加了一个图像作为半示例表。 – Aoi

回答

1

如果你有变量,使用join: 你有一个变量的前一天值。你可以使用一个join

SELECT k.id, k.symbol, y.close, y.volume, 
    ((y.close/yprev.close)-1) AS percent_change, 
    yprev.close_adj AS close_adj_previous_day 
FROM symbols k JOIN 
    stocks y 
    ON k.id = y.id AND y.t = '$max_t' JOIN 
    stocks yprev 
    ON k.id = yprev.id and yprev.t = '$max_t_minus_one' 
WHERE k.t_removed = 0 
ORDER BY percent_change DESC 
LIMIT 10