我正在使用一个包含大约50个列和100,000行的表。
一列称之为TypeID,有10个可能的值:
1 thourgh 10。
可以有10,000个TypeID = 1的记录,以及10,000个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数据库。
任何建议都将不胜感激;谢谢!
答案 0 :(得分: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选择一行。
答案 1 :(得分: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的第一行,如果您想要特定行而不是任何行,则可以添加订单。