我有一个简单的表T1,它有Schema
T1 (id NUMBER, val VARCHAR2(10), dat DATE)
考虑到dat
可以是NULL
我想执行查询以选择特定MAX(dat)
val
或NULL
如果dat = NULL
val
的话
例如:
id val dat
-- --- ---
1 a 12-NOV-13
2 b 23-MAY-13
3 b 26-JAN-14
4 a NULL
查询应返回NULL
WHERE val = a
查询应返回26-JAN-14
WHERE val = b
是否可以在简单的SELECT查询中使用?
提前致谢。
答案 0 :(得分:3)
您可以尝试选择所需内容,不包括重复内容,然后执行联合,类似于此;
SELECT VAL, MAX(DAT) FROM T1
WHERE VAL NOT IN (select VAL from T1 where DAT is NULL GROUP BY VAL, DAT)
GROUP BY VAL, DAT
UNION
select VAL, DAT from T1 where DAT is NULL GROUP BY VAL, DAT
答案 1 :(得分:1)
如果我是你,我会在特定条件下使用if子句 this links is useful
IF dat <= 0 THEN
returnValue := null;
ELSE
returnValue := Max(dat);
END IF;
RETURN returnValue;
答案 2 :(得分:1)
我认为这应该有用
select * from (
select val,row_number() over (partition by val order by dat DESC nulls first) as row_num
from T1
) A
where row_num=1
答案 3 :(得分:1)
SELECT val, dat
FROM (SELECT val,
RANK () OVER (PARTITION BY val ORDER BY dat DESC NULLS FIRST)
rn,
dat
FROM t1)
WHERE rn = 1;
答案 4 :(得分:0)
如果你想要每行的值,你可以使用分析函数来做到这一点:
select t1.*,
(case when count(*) over (partition by val) = count(dat) over (partition by val)
then max(dat) over (partition by val)
end) as StrangeMaxDate
from t1;
如果您只想将此作为聚合,请使用相同的想法:
select val,
(case when count(*) = count(dat) then max(dat) end) as StrangeMaxVal
from t1
group by val;