最近上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甚至两者都要进行聚合操作,这取决于后表的性质。