按最大值排序

时间:2013-11-27 11:38:04

标签: sql oracle

我在Oracle DB中有一个这样的表:

TransactionID       Customer_id       Sequence       Activity
----------         -------------     ----------     -----------
1                  85                1              Forms
2                  51                2              Factory
3                  51                1              Forms
4                  51                3              Listing
5                  321               1              Forms
6                  321               2              Forms
7                  28                1              Text
8                  74                1              Escalate

我希望能够整理sequencecustomer_id最高的所有行。MAX()。 我有一个customer_id函数我可以在序列上使用但是基于TransactionID Customer_id Sequence Activity ---------- ------------- ---------- ----------- 1 85 1 Forms 4 51 3 Listing 6 321 2 Forms 7 28 1 Text 8 74 1 Escalate 以某种方式?

我希望查询的结果如下所示:

{{1}}

3 个答案:

答案 0 :(得分:2)

select t1.*
from your_table t1
inner join
(
  select customer_id, max(Sequence) mseq
  from your_table
  group by customer_id

) t2 on t1.customer_id = t2.customer_id and t1.sequence = t2.mseq

答案 1 :(得分:0)

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE tbl ( TransactionID, Customer_id, Sequence, Activity ) AS
          SELECT 1, 85,  1, 'Forms' FROM DUAL
UNION ALL SELECT 2, 51,  2, 'Factory' FROM DUAL
UNION ALL SELECT 3, 51,  1, 'Forms' FROM DUAL
UNION ALL SELECT 4, 51,  3, 'Listing' FROM DUAL
UNION ALL SELECT 5, 321, 1, 'Forms' FROM DUAL
UNION ALL SELECT 6, 321, 2, 'Forms' FROM DUAL
UNION ALL SELECT 7, 28,  1, 'Text' FROM DUAL
UNION ALL SELECT 8, 74,  1, 'Escalate' FROM DUAL;

查询1

SELECT
  MAX( TransactionID ) KEEP ( DENSE_RANK LAST ORDER BY Sequence ) AS TransactionID,
  Customer_ID,
  MAX( Sequence ) KEEP ( DENSE_RANK LAST ORDER BY Sequence ) AS Sequence,
  MAX( Activity ) KEEP ( DENSE_RANK LAST ORDER BY Sequence ) AS Activity
FROM  tbl
GROUP BY Customer_ID
ORDER BY TransactionID

<强> Results

| TRANSACTIONID | CUSTOMER_ID | SEQUENCE | ACTIVITY |
|---------------|-------------|----------|----------|
|             1 |          85 |        1 |    Forms |
|             4 |          51 |        3 |  Listing |
|             6 |         321 |        2 |    Forms |
|             7 |          28 |        1 |     Text |
|             8 |          74 |        1 | Escalate |

答案 2 :(得分:0)

请尝试

with cte as
(
    select Customer_id,MAX(Sequence) as p from Tablename group by Customer_id
)
select b.* from cte a  join Tablename b on a.p = b.Sequence where a.p = b.Sequence and a.Customer_id=b.Customer_id order by b.TransactionID