如何从表中每个记录具有相同ID的不同记录中选择两个最大值

时间:2014-12-19 11:56:04

标签: oracle max conditional-statements records

我遇到这种情况的问题,我的日志表有许多不同条件的相同ID。我想从中选择两个最大条件。我试过但它只显示一条记录,而不是表格中的每条记录 这是我的记录表:

order_id seq status
____________________
1256 2 4
1256 1 2
1257 0 2
1257 3 1

这是我的代码:

WITH t AS(
SELECT x.order_id
    ,MAX(y.seq) AS seq2
    ,MAX(y.extern_order_status) AS status
FROM   t_order_demand x
JOIN  t_order_log y
ON    x.order_id = y.order_id
where x.order_id like '%12%'
GROUP  BY x.order_id)
SELECT *
FROM   t
WHERE  (t.seq2 || t.status) IN (SELECT MAX(tt.seq2 || tt.status) FROM t tt);


这个查询有效,但有时它给出了错误的值或只是显示一些记录,而不是每个记录。 我希望结果是这样的:
order_id seq2 status
____________________
1256 2 4
1257 3 2

1 个答案:

答案 0 :(得分:1)

我认为你只想要一个聚合:

select d.order_id, max(l.seq2) as seq2, max(l.status) as status
from t_order_demand d join
     t_order_log l
     on d.order_id = l.order_id
where d.order_id like '%12%'
group by d.order_id;

我不确定你的最终where条款应该做什么,但与你想要的相比,它似乎做了不必要的过滤。