如何判断数据是上升还是下降
【问题】
有一组数据,
date_1 count_1
2014-12-01 1
2014-12-02 3
2014-12-03 5
2014-12-04 3
2014-12-05 2
2014-12-06 1
2015-01-01 5
2015-01-02 4
2015-01-03 3
怎么写SQL判断出,数据是上升还是下降状态?
希望结果
date_1 count_1 status_1
2014-12-01 1 上升
2014-12-02 3 上升
2014-12-03 5 上升
2014-12-04 3 下降
2014-12-05 2 下降
2014-12-06 1 下降
2015-01-01 5 上升
2015-01-02 4 下降
2015-01-03 3 下降
谢谢!
【回答】
在MSSQL中可以先通过窗口函数和上一条记录比较,可以这样写:
select date_1,count_1, case when count_1 > lag(count_1) over ( order by date_1 ) then '上升 ' else ' 下降 ' end 'status_1' from tb
但 SQL SERVER 的某些版本不支持 lag 函数,这时就得用造序号后自连接的方法,造序号时可以不用窗口函数,用个子查询计行号即可,适用于不支持窗口函数的数据库,但很麻烦。
SPL适用各类数据库,完成有序集合这类运算也很简单,比如这个问题可以这样实现:
A |
|
1 |
$select date_1,count_1 from tb order by date_1 |
2 |
=A1.derive(if(count_1>count_1[-1],"上升","下降"): status_1) |
A1:sql取数,按date_1排序
A2:新增status_1列,通过count_1[-1]取得前一条记录的count_1,以此判断上升或者下降
写好的脚本如何在应用程序中调用,可以参考Java 如何调用 SPL 脚本