0

我正在使用一个大约有 50 列和 100,000 行的表。

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

1 到 10。

TypeID = 1 的记录可以有 10,000 条,TypeID = 2 的记录可以有 10,000 条,依此类推。

我想运行一个 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 数据库。

任何建议将不胜感激;谢谢!

4

2 回答 2

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 文件

您可能需要更改该ORDER BY子句以满足您的要求,因为您没有说过如何为我猜测的每个 TypeID 选择一行。

于 2013-10-07T15:58:23.347 回答
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 的第一行,如果你想要一个特定的行,你可以添加一个订单,而不仅仅是任何一个。

于 2013-10-07T15:59:09.163 回答