我的股票指数表名为'snp250'为
No Date Open High Low Close Difference
5061 2015-03-31 8527.60 8550.45 8454.15 8491.00 -1.30
5060 2015-03-30 8390.95 8504.55 8380.75 8492.30 150.90
5059 2015-03-27 8396.00 8413.20 8269.15 8341.40 -0.75
5058 2015-03-26 8474.95 8499.45 8325.35 8342.15 -188.65
,直到
5041 2015-03-02 8953.85 8972.35 8885.45 8956.75 54.90
少数事情 -
1.日期是独特的,但并不总是连续的,就像它跳过周末日期一样
2.不是唯一的并且总是连续的。
我想要查询记录,其中差异从负变为正。所以查询会提前记录哪个差异会发生变化。
我当前的sql -
select t1.*
from snp250 as t1, snp250 as t2
where(t1.no_id = t2.no_id+1)
AND((t1.difference>=0 AND t2.difference<0)
OR (t1.difference<0 AND t2.difference>0)).
这里的问题是查询会跳过第一条记录。
我尝试了另一个sql -
select t1.*
from snp250 as t1, snp250 as t2
where(t1.no_id = t2.no_id-1)
AND((t1.difference>=0 AND t2.difference<0)
OR (t1.difference<0 AND t2.difference>0)).
但是在这里它跳过了最后一张唱片。
任何帮助都将不胜感激。
答案 0 :(得分:0)
以下查询使用相关子查询来获取先前的值:
select t.*,
(select t2.difference
from snp250 t2
where t2.date < t.date
order by t2.date desc
limit 1
) as prev_difference
from snp250 t
要获取差异发生变化的行,您可以使用having
子句的MySQL扩展名,附加:
having prev_difference < 0 and difference > 0
答案 1 :(得分:0)
请试试这个:
select * from snp250 t1 where (select (t1.difference*t2.difference) from snp250 t2 where t2.no_id=t1.no_id+1)<0
仅当差异列中的符号更改没有条件时,此查询才会为真。它可能是从+ ve到-ve或-ve到+ ve。