Sql 选择唯一的记录
我正在使用一个大约有50列和100000行的桌子 其中一列称为TypeID,有10个可能的值: 1索尔10 可以有10000条TypeID=1的记录,10000条TypeID=2的记录,依此类推 我想运行一个SELECT语句,它将返回每个不同类型ID的1条记录 大概是Sql 选择唯一的记录,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我正在使用一个大约有50列和100000行的桌子 其中一列称为TypeID,有10个可能的值: 1索尔10 可以有10000条TypeID=1的记录,10000条TypeID=2的记录,依此类推 我想运行一个SELECT语句,它将返回每个不同类型ID的1条记录 大概是 TypeID JobID Language BillingDt etc ------------------------------------------------ 1 123
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数据库
如有任何建议,将不胜感激;谢谢 您可以使用来获得每组前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;
您可能需要更改ORDER BY
子句以满足您的需求,因为您没有说过如何为每个TypeID选择一行,我不得不猜测
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的顶行,您可以添加一个订单,如果您想要一个特定的行,而不仅仅是任何一行。如果是Oracle,为什么
MySQL
tag?但是每个不同类型id的哪一条记录?@raina77ow,我的错误,建议弹出了MySQL,我一定是看错了并点击了它。分组给我错误。我将进一步调查,看看问题在哪里。很可能我的某些地方格式不好。@Moob,没关系。任何一行都可以,我只需要一个样本。