Sql语言:如何从多条记录中选取一条?

     最近上CSDN,发现问这一个问题的挺多,我原来写程序的时候,也曾经遇到过这种问题,不过已经解决。现在我来叙述一下该如何解决这一问题。

    问题举例如下:

    两张表,一张名为Corp_Info,拥有字段id,name,type,……,另外一张为product,拥有字段名id,product_name,date,ammount,…… 。在这两张表中,表Corp_Info的id为主键,product表表示某个公司在某个时间买了多少个叫什莫的产品。现在的问题是,列出每一个公司最近购买的产品信息的一条。

    解决问题:

    首先,我们需要列出每一个公司的购买信息,这个很简单,Sql语句如下

        Select Corp_info.name, product.* from Corp_info, product where Corp_info.id=product.id;

    其次,要从这些记录中选出每一个公司购买日期最大的一条记录,使用聚合函数

        Select A.name, C.product_name.C.date,C.ammount  from Corp_info A, 

        (

               Select product.id, max(date) as Last_date from Corp_info, product where Corp_info.id = product.id

             group by product.id        --选出同一公司购买信息中的最大日期

        )B,

     product C

    where A.id=B.id and B.id=C.id and C.id=A.id and C.Last_date = B.date

这样的话,我们就可以完成从多条记录中选出一条的任务了。

以此类推,如果存在同一公司在同一日期内的购买信息,那末,我们就还需要对ammount或者product_name甚至两者都要进行聚合操作,这取决于后表的性质。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值