【问题标题】:Select unique records [duplicate]选择唯一记录[重复]
【发布时间】:2013-10-07 15:47:53
【问题描述】:

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

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

1 到 10 个。

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

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

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

【问题讨论】:

  • 如果是Oracle,为什么要MySQL标签?
  • 但是 哪个 每个不同的 TypeID 有 1 条记录?
  • @raina77ow,我的错,这个建议弹出了 MySQL,我一定是误读并点击了它。 GROUP BY 给我错误。我将进一步调查它,看看问题出在哪里。可能我的某个地方的格式很差。
  • @Moob,没关系。任何行都可以,我只需要采样。

标签: sql oracle greatest-n-per-group


【解决方案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 选择一行。

【讨论】:

    【解决方案2】:
    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 的第一行,如果你想要一个特定的行,你可以添加一个 order by,而不仅仅是任何。

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 1970-01-01
      • 2023-01-18
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多