有人错误地将负值输入到唯一键列 很久以前我现在必须将数据分组,根据类别选择最大ID以提取报告。 ID列现在具有正值和负值。
Max(ID)函数无法正确处理负值。
ID Category
45678 A
234567 B
-4578 A
-45798 A
-7890 C
-8904 C
-7654 C
预期的O / P
ID Category
45678 A
234567 B
-8904 C
答案 0 :(得分:3)
“因此具有最大负值的ID将在2010年之前拥有最新数据 并且在2010年之后创建具有正值的id
这意味着如果您想要最大类别的正ID(例如,类别A为45678),则为最小值(例如,类别C为-8904)。您可以使用Oracle的KEEP FIRST/LAST
:
select
category,
max(id) keep (dense_rank last order by sign(id), abs(id))
from mytable
group by category
order by category;
这会按符号对您的ID进行排序(正数之前是负数,所以如果有正数,那么您更喜欢这些),然后是绝对数量(因此您获得最高的负数或正数作为最后一行,这是一个你选择KEEP LAST
)。