Sql ,sqlserver根据一个字段分组查询

来源:互联网 发布:电脑装mac os 编辑:程序博客网 时间:2024/06/16 10:24

分享一个链接:http://blog.sina.com.cn/s/blog_6bd7d943010133sa.html

我有如下表

 

要求根据ksdm进行分组查询:

首先,说下思路。错误的思路:select * from hxtz_ywxx whereYQ = 1AND ny <='2017-01-03' group by KSDM  很显然这样错了。Order by 实质把 该分组类别字段中相同值合并为一个。然后查询该分组的最大,最下值等等,都构成了一个分组对应一个属性值这样的记录,而不是一对多,这样在数据库中存储不了。那怎么根据分组查询,某组最大值。关键点【多表查询:先查询出最大分数,该分组(select ksdm,max(ny) time1g构成一个表,然后再联合该表进行查询(where time1=ny and g.ksdm =table.ksdm)】。就是这种思路。

然后我们查询一个这样的记录,不同分组的最大ny下的最大sbsj的记录,要查询出这样的记录要有最大ny,以及最大ny下的最大sbsjksdm

见代码,

select a.N_ID,A.KSDM,a.KSMC,a.xzzz,a.xzhsz,a.xznsy,a.ylms,a.ylgg,A.NY

from hxtz_xzcy a,

 (select ksdm,max(sbsj)time2 

  from hxtz_xzcy e,

  (select KSDM ks,MAX(NY) time1

   from hxtz_xzCy

   where YQ = 1 AND ny <='2017-01-03' group by KSDM)j

  where e.ksdm=j.ks and j.time1=e.ny group by ksdm)g,

 (select KSDM ks,MAX(NY) time1 from hxtz_xzcy where YQ = 1 AND ny <='2017-01-03' group by KSDM)f

where a.sbsj=g.time2 and a.ksdm = g.ksdm and f.time1=a.ny and f.ks = a.ksdm order by NY,SBSJ ASC

 


1 0
原创粉丝点击