2013-10-07 135 views
0

我正在使用一张有大约50个柱和100,000行的表格。选择唯一记录

一列,称其为TYPEID,有10个可能的值:

1 thourgh 10.

可以有10000条记录TYPEID = 1,和10000条记录TYPEID = 2的等之一。

我想运行一条SELECT语句,它将返回每个不同TypeID的1条记录。

因此,像

TypeID JobID Language BillingDt etc 
------------------------------------------------ 
1   123  EN   20130103  etc 
2   541  FR   20120228  etc 
3   133  FR   20110916  etc 
4   532  SP   20130822  etc 
5   980  EN   20120714  etc 
6   189  EN   20131009  etc 
7   980  SP   20131227  etc 
8   855  EN   20111228  etc 
9   035  JP   20130615  etc 
10  103  EN   20100218  etc 

我已经试过:

SELECT DISTINCT TypeID, JobID, Language, BillingDt, etc 

但产生相同值的多个TYPEID行。我收到了一大堆'4','10'等等。

这是我正在使用的ORACLE数据库。

任何意见,将不胜感激;谢谢!

+1

如果是Oracle,为什么'MySQL'标签? – raina77ow

+1

但*哪个* 1个记录的每个不同的TypeID? – Moob

+0

@ raina77ow,我的错误,这个建议弹出了MySQL,我必须误读它并点击它。 GROUP BY给我错误。我将进一步调查它,看看问题出在哪里。可能它在我的某个地方格式不正确。 – LuFaMa

回答

1

您可以使用ROW_NUMBER()获得每组的前n:

SELECT TypeID, 
     JobID, 
     Language, 
     BillingDt, 
     etc 
FROM ( SELECT TypeID, 
        JobID, 
        Language, 
        BillingDt, 
        etc, 
        ROW_NUMBER() OVER(PARTITION BY TypeID ORDER BY JobID) RowNumber 
      FROM T 
     ) T 
WHERE RowNumber = 1; 

SQL Fidle

您可能需要更改ORDER BY条款,以满足您的要求,因为你不说怎么过为每个TypeID选择一行我不得不猜测。

0
WITH RankedQuery AS 
(
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY TypeID ORDER BY [ordercolumn] DESC) AS rn 
    FROM   [table] 
) 
SELECT * 
FROM RankedQuery 
WHERE rn = 1; 

这将返回每个类型ID的最上面一行,如果您想要特定的行,而不是任何类型,您可以添加一个订单。