【问题标题】:SQL how to find rows which have highest value of specific columnSQL如何查找具有特定列的最高值的行
【发布时间】:2011-03-21 05:31:40
【问题描述】:

例如,表有列 MYINDEX 和 NAME。

MYINDEX | NAME
=================
1       | BOB
2       | BOB
3       | CHARLES

我如何找到特定名称的 MYINDEX 最高的行?例如。我想查找名称“BOB”的 ROW-2。

【问题讨论】:

  • 已编辑,看在上帝的份上,不要用散文来描述表格。

标签: sql select find rows


【解决方案1】:

SELECT Max(MYINDEX) FROM table WHERE NAME = [insertNameHere]

编辑:获取整行:

Select * //never do this really
From Table
Where MYINDEX = (Select Max(MYINDEX) From Table Where Name = [InsertNameHere]

【讨论】:

  • 他想要整行,而不仅仅是该列的最大值
  • @Lucas Heneks:不是我对预编辑的理解。大多数第一张海报也没有,所以当我写答案时,我倾向于认为我的解释是正确的。编辑即将回答他的实际问题。
  • 赞成您的编辑。但是......他原始的、未经编辑的问题“我如何找到特定名称的 MYINDEX 最高的行?”当然要求行:)
【解决方案2】:

使用

FROM TABLE SELECT MAX(MYINDEX), NAME GROUP BY NAME 

【讨论】:

    【解决方案3】:
    SELECT MAX(MYINDEX) FROM table
    WHERE NAME = 'BOB'
    

    对于整行,执行:

    SELECT * FROM table
    WHERE NAME = 'BOB'
    AND MyIndex = (SELECT Max(MYINDEX) from table WHERE NAME = 'BOB')
    

    【讨论】:

      【解决方案4】:

      如果您想查看 name = 'Bob' 的最高索引,请使用:

      SELECT MAX(MYINDEX) AS [MaxIndex]
      FROM myTable
      WHERE Name = 'Bob'
      

      【讨论】:

      • 我实际上想找到名称索引最高的 ROW,而不仅仅是名称的最高索引。
      【解决方案5】:

      有几种方法可以解决这个问题。我假设您可能希望从该行中获得其他列,否则正如其他人所说,只需命名 MAX(my_index) ... GROUP BY name 即可。以下是几个例子:

      SELECT
          MT.name,
          MT.my_index
      FROM
      (
          SELECT
              name,
              MAX(my_index) AS max_my_index
          FROM
              My_Table
          GROUP BY
              name
      ) SQ
      INNER JOIN My_Table MT ON
          MT.name = SQ.name AND
          MT.my_index = SQ.max_my_index
      

      另一种可能的解决方案:

      SELECT
          MT1.name,
          MT1.my_index
      FROM
          My_Table MT1
      WHERE
          NOT EXISTS
          (
              SELECT *
              FROM
                  My_Table MT2
              WHERE
                  MT2.name = MT1.name AND
                  MT2.my_index > MT1.my_index
          )
      

      【讨论】:

        【解决方案6】:

        如果你想跳过内部连接,你可以这样做:

        SELECT * FROM table WHERE NAME = 'BOB' ORDER BY MYINDEX DESC LIMIT 1;
        

        【讨论】:

          猜你喜欢
          • 2019-04-11
          • 2021-01-23
          • 2022-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-13
          • 1970-01-01
          相关资源
          最近更新 更多