2016-01-11是数据库中的最大日期。
,数据库中存在的其他记录是2016-01-08
我试图以这种方式回顾2016-01-08记录
SELECT * from historical_data where current_day = (SELECT max(current_day-1) from historical_data) order by open_val desc
但我没有结果。
如何检索2016-01-08记录?
http://sqlfiddle.com/#!9/38d3a/1
感谢您的帮助,但在将查询用于我的应用程序时,我在查询中发现了问题
这是我更新的小提琴,sqlfiddle.com /#!! 9 / eaade / 1,使用LIMIT 1时我只能获得一个符号。 ,是否有可能获得每个符号的最后记录 - Preethi Jain
答案 0 :(得分:2)
试试这个:
SELECT MAX( current_day ) FROM historical_data
WHERE current_day < ( SELECT MAX( current_day )
FROM historical_data )
对于行中的所有数据:
SELECT * FROM historical_data
WHERE current_day < ( SELECT MAX( current_day ) FROM historical_data )
ORDER BY current_day DESC LIMIT 1
答案 1 :(得分:0)
如果您每天有一行,则可以使用此简单查询
SELECT * FROM historical_data ORDER BY current_day DESC LIMIT 1 OFFSET 1
<强>更新强>
对于每天有多行的情况,您需要以DENSE_RANK
或SQL Server
中的Oracle
查询。
我可以建议两种方法:
1)
SELECT *
FROM historical_data
WHERE FIND_IN_SET( current_day, (
SELECT GROUP_CONCAT( DISTINCT current_day ORDER BY current_day DESC )
FROM historical_data )
) = 2
2)
SELECT `symbol_name`, `current_day`, `open_val`, `high_val`,
`low_val`, `close_val`, `last_val`, `prevclose_val`
FROM
(
SELECT d.*,
(CASE WHEN @prev = current_day THEN @rank
WHEN @prev := current_day THEN @rank := @rank + 1 END) as rank
FROM historical_data d,
(SELECT @rank := 0, @prev := null) tmp
ORDER BY d.current_day DESC
) t
WHERE t.rank = 2