我有一个包含列值,id,h(层次结构)和日期列的表。它的快照如下所示:
value | id | h | date
--- |--- |--- |------------
1.0 | 32 | 0 | Jul 3, 2017
5.6 | 54 | 1 | Jul 2, 2017
3.5 | 178 | 2 | Jul 3, 2017
3.4 | 178 | 2 | Jul 1, 2017
此表没有主键(也就是每个值,id,h或日期有多个记录)。 id和h有一对一的关系。
我想编写一个查询,以便假设今天是7月3日,它将为今天的每个id返回一个值,按h排序,如果今天没有该id的记录,则显示空值。又像这样
value | id | h
--- |--- |---
1.0 | 32 | 0
null | 54 | 1
3.5 | 178 | 2
答案 0 :(得分:1)
执行左连接可能会有所帮助: -
Select b.value,a.id,a.h
from
(Select distinct id,h
from <table>) a
left join
(Select id,h,value
from <table> where date > trunc(SYSDATE)) b
on a.id = b.id
and a.h = b.h;
答案 1 :(得分:0)
您可以使用CASE
语句为第一列实现条件IF-ELSE
逻辑:
select
// if current date is the same as date in date_col output value
case when sysdate - date_col < 1 then value
// else output null
else null end "value",
id, h
from my_table
order by 3; // sort by h column
答案 2 :(得分:0)
使用分析函数和case语句,可以实现结果。假设列h永远不会有负值,这里是查询:
raw
输出:
cat < /dev/ttyS5