选择值更改行

时间:2015-05-06 14:29:55

标签: mysql sql

我的股票指数表名为'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)). 

但是在这里它跳过了最后一张唱片。

任何帮助都将不胜感激。

2 个答案:

答案 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。