我想从按特定顺序排序的表中选择值。
我有一个名为test的表,如下所示:
| date | code | value |
+----------+-----------+----------+
| 20050104 | 000005.SZ | -6359.19 |
| 20050104 | 600601.SH | -7876.34 |
| 20050104 | 600602.SH | -25693.3 |
| 20050104 | 600651.SH | NULL |
| 20050104 | 600652.SH | -15309.9 |
...
| 20050105 | 000005.SZ | -4276.28 |
| 20050105 | 600601.SH | -3214.56 |
...
| 20170405 | 000005.SZ | 23978.13 |
| 20170405 | 600601.SH | 32212.54 |
现在我想只选择一个日期,比如日期= 20050104,然后按特定顺序(每个股票在股票市场中列出的顺序)对数据进行排序。
我有另一个名为stock_code的表,它存储了正确的顺序:
+---------+-----------+
| code_id | code |
+---------+-----------+
| 1 | 000002.SZ |
| 2 | 000004.SZ |
| 3 | 600656.SH |
| 4 | 600651.SH |
| 5 | 600652.SH |
| 6 | 600653.SH |
| 7 | 600654.SH |
| 8 | 600602.SH |
| 9 | 600601.SH |
| 10 | 000005.SZ |
...
我想通过stock_code(code_id)对所选数据进行排序,但我不想使用join,因为它需要花费太多时间。有什么想法吗?
我尝试使用字段,但它给了我一个错误,请告诉我如何纠正它或给我一个更好的主意。
select * from test
where date = 20050104 and code in (select code from stock_code order by code)
order by field(code, (select code from stock_code order by code));
Error Code: 1242. Subquery returns more than 1 row
答案 0 :(得分:1)
您告诉我们您不想加入,因为它需要花费太多时间,但以下联接查询可能是最佳选择:
SELECT t.*
FROM test t
INNER JOIN stock_code sc
ON t.code = sc.code
WHERE t.date = '20050104'
ORDER BY sc.code_id
如果这确实运行缓慢,那么您应该检查以确保在相应的列上设置了索引。在这种情况下,两个表中code
列的索引以及test.date
上的索引应该非常有用。
ALTER TABLE test ADD INDEX code_idx (code)
ALTER TABLE test ADD INDEX date_idx (date)
ALTER TABLE code ADD INDEX code_idx (code)