zoukankan      html  css  js  c++  java
  • Sql按照字段分组,选取其他字段最值所在的行记录

    引言:

      为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录。

    参考:红黑联盟

    所用到的数据表:

    想实现的效果:

    解释:相同的ID,由不同的人(Name)添加,我们选取值最小(Val)的那一行记录。

    方法如下:

    方法一:

    1      select a.* from T1 a ,
    2      (select id,min(val) as val  from T1 group by id) b
    3      where a.ID=b.ID and  a.Val=b.val

    方法二:

    1      select a.* from T1 a
    2      inner join
    3      (select id,min(Val) as val from T1 group by id) b
    4      on a.id=b.id and a.Val=b.val

     说明:方法一与方法二的作用相同,并没有区别,只不过where是隐式链接,inner join是显式链接,where逐步被边缘化。

     方法三:

    1      select a.* from T1 a
    2      where a.val=(select min(Val) from T1 where ID=a.ID)

    ID相同,取最小的Val值。

    方法四:

    1      select a.* from T1 as a where not exists (select * from T1 b where b.Val<a.Val and b.ID=a.ID)

    拓展:还是按照字段分组,选择第一条出现的数据:

    想实现的效果:

    方法:

         select a.* from T1 as a where val=(select top 1 Val from T1 b where a.ID=b.ID)
  • 相关阅读:
    华为ensp使用
    网络学习目录
    MySQL简介
    zip命令详解
    gzip命令详解
    unzip/tar命令详解
    tar命令详解
    ipython使用
    os, sys, stat 模块使用
    配置linux系统时区---解决ntp同步完时间不准问题
  • 原文地址:https://www.cnblogs.com/SharpL/p/4628973.html
Copyright © 2011-2022 走看看