我的表中有一个标志和日期组合,所以我的表就像这样
DATE FLAG
----------------
01-JAN-18 1
02-JAN-18 0.5
03-JAN-18 3
06-JAN-18 9
我想要一个针对此表的SQL查询,根据天气,表格中的上一个最大日期是否为0以及
,为特定日期返回0或1我试过这个 - 首先我得到某一天的前一天 -
max_date = select max(date) from table where date < input_date;
获得此日期后,我获得了此日期的标志
select flag from table where date=max_date
我想要一个聪明/更好的方法来做到这一点
答案 0 :(得分:1)
将lag
与case
表达式一起使用。
select dt,flag,case when lag(flag) over(order by dt) = 0 then 1 else 0 end as prev_zero_or_not
from tbl
答案 1 :(得分:0)
private void listViewItemLongClick() {
ListView myList = (ListView) findViewById(R.id.listView);
myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mDatabaseHelper.deleteRow(id);
populateListView();
}
});
}
是一个不错的选择,但如果您不想使用任何分析函数,则可能必须使用多个连接。
您想要一个前一个标志值为零的情况,但您不必在您的问题中给出一个示例或预期输出。无论如何我已经添加了它。
Oracle 11g R2架构设置:
LAG
查询1 :
create table yourtable as
select TO_DATE ('01-JAN-2018','DD-MON-YYYY') dt, 1 flag from dual UNION ALL
select TO_DATE ('02-JAN-2018','DD-MON-YYYY'), 0.5 from dual UNION ALL
select TO_DATE ('03-JAN-2018','DD-MON-YYYY'), 3 from dual UNION ALL
select TO_DATE ('06-JAN-2018','DD-MON-YYYY'), 9 from dual UNION ALL
select TO_DATE ('08-JAN-2018','DD-MON-YYYY'), 0 from dual UNION ALL
select TO_DATE ('11-JAN-2018','DD-MON-YYYY'), 7 from dual UNION ALL
select TO_DATE ('14-JAN-2018','DD-MON-YYYY'), 12 from dual
<强> Results 强>:
SELECT s.dt,s.flag,
CASE
WHEN t.flag = 0 THEN 1
ELSE 0
END is_prev_dt_flag_zero
FROM yourtable t
RIGHT OUTER JOIN (SELECT a.dt,MAX(a.flag) flag,
Max(b.dt) prev_date
FROM yourtable a
LEFT OUTER JOIN yourtable b
ON b.dt < a.dt
GROUP BY a.dt) s
ON t.dt = s.prev_date
ORDER BY s.dt