SQL查询语句.GroupBy分组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查询语句.GroupBy分组相关的知识,希望对你有一定的参考价值。
有这样一个表.atdGroup,由于groupCode这一列会变化,所以,
一直是取日期最新的作为当前生效的数据.
主键是GUID.
emplid是hremployee表的外键.
hremployee表的主键是emplid
hremployee中有一列leaveDate.如果为null 就表示此人在职.
问题是:
怎么样查询当前生效中的在职的数据,
我是这样:
SELECT h.emplID,max(h.emplName),max(a.effectDate)as effectDate, max(a.groupCode) as groupCode
from atdGroupChg as a
right join hremployee as h on a.emplid=h.emplid
where h.leaveDate is null
group by h.emplID
感觉很肿...max的聚合函数,除了max(a.effectDate)有用...其他的用的合理不?不用的话怎么处理,..我需要这几列来显示...
求高手赐教其他简便写法....SQL2005的
用子查询取得最大时间的数据,然后再与另一个表关联
select * from atdGroupChg awhere not exists
(select 1 from atdGroupChg where emplID=a.emplID and effectDate>a.effectDate) 参考技术A SELECT a.emplID,a.emplName,max(a.effectDate)as effectDate, a.groupCode
from atdGroupChg as a
right join hremployee as h on a.emplid=h.emplid
where h.leaveDate is null
group by a.emplID,a.emplName,a.groupCode 参考技术B 个人觉得这种写法应该存在问题的(max的 effectDate 和 max 的groupCode 可能不在同一行)
select h.empid,h,name,g.effectdate,g.groupcode from hremployee as h
left outer join(
(
select a.empid,a.effectDate,b.groupCode
from
(
select a.empid,max(a.effectDate) as effectDate
from atdGroupChg as a
group by a.empid
) a,
atdGroupChg as b
where a.empid = b.empid and a.effectDate = b.effectdate
) as g
on h.empid = g.empid 参考技术C --楼下的理解不对 楼主的写法是可以的 即使最大值都不对应在同一行 也能找出来的
--这个是找每个列的最大值 是没有问题 的
--楼主的 左链接去掉吧 直接是内连接
--因为这个表hremployee 本来就是主表
--如果有什么问题可以随时找我 希望采纳
SQL group 分组查询
1.使用group by进行分组查询
在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:
被分组的列
为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数
group by的使用在这只写几个例子吧:
例:
select courseID,avg(score) as 课程平均成绩 from score group by courseID
例:
select studentID as 学员编号,courseID as 内部测试,avg(score) as 内部测试平均成绩 from score group by studentID,courseID
2.使用having子句进行分组筛选
where子句只能对没有分组统计前的数据行进行筛选,对分组后的条件的筛选必须使用having子句
例:
select studentID as 学员编号,courseID as 内部测试,avg(score) as 内部测试平均成绩 from score group by studentID,courseID having avg(score)>60
在select语句中,where、group by、having子句和统计函数的执行次序如下:
where子句从数据源中去掉不符合去搜索条件的数据;group by子句搜集数据行到各个组中,统计函数为各个组计算统计值;having子句去掉不符合其组搜索条件的各组数据行 。
以上是关于SQL查询语句.GroupBy分组的主要内容,如果未能解决你的问题,请参考以下文章
玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!
SQL数据库中查询语句Order By和Group By有啥区别