回 帖 发 新 帖 刷新版面

主题:请高手帮看一下,解个疑问^^

请看一下下面这个语句
说明:fnbm--每个妇女一个编码
     znxb--所生育子女的性别
     zncsrq--所生育子女的出生日期

许多条记录中,有的妇女已生育过好几个子女.下面命令的作用是:只列出最后一个子女的信息,.
可我就是不明白,为什么用max(znxb)而不用max(zncsrq),难道最大的子女性别有求出最后一个子女?    
sele a.fnbm,a.zncsrq,max(a.znxb) as znxb from xzdatas\syjjtzn a where a.fnbm+dtoc(a.zncsrq) in (sele fnbm+max(dtoc(zncsrq)) from xzdatas\syjjtzn  group by fnbm) group by a.fnbm into curs th3_t

回复列表 (共2个回复)

沙发

fnbm+max(dtoc(zncsrq)) 已经说明了,是在编码+最大的出生日期中,选择性别是最大值的记录。

性别可能是用数字表示的。如果男是1、女是2
则,可能的结果是,列出最后一个子女,并且是女孩的表中信息。

板凳

为什么用max(znxb)而不用max(zncsrq)

呵呵,用哪个都行,都不用也行。有点象障眼法,不知是否有意为之,还是...

因为子查询
sele fnbm+max(dtoc(zncsrq)) from xzdatas\syjjtzn  group by fnbm
得到的就是每个妇女的编码和她的最小的孩子的出生日期的组合

再根据子查询的结果来查询,完全可以用
select * from xzdatas\syjjtzn a where a.fnbm+dtoc(a.zncsrq) in (sele fnbm+max(dtoc(zncsrq)) from xzdatas\syjjtzn  group by fnbm)

主查询中的什么 max(znxb)、group by a.fnbm等等,没用。用了也一样。
主查询的where条件已经保证了一个妇女只有一个记录。

我来回复

您尚未登录,请登录后再回复。点此登录或注册