求SQL SERVER 按指定条件提取最新记录

现有一套系统,没有源码也找不到开发商了,现想自己做一个报表,但遇到了个恶心的问题,求教
数据库SQL SERVER 2008 R2
简化的表结构如下
id 客户ID 购买日期 到期时间 商品ID 数量 单价 金额
1 1 2017-1-1 2018-3-1 3 1 2 2
2 1 2018-5-1 2019-6-1 3 1 3 3
3 3 2016-3-15 2017-2-1 8 1 4 4
4 3 2017-3-15 2018-1-1 8 1 5 5
5 3 2018-2-1 2018-6-1 9 1 6 6
6 3 2018-7-1 2018-6-1 9 -1 7 -7
7 4 2015-4-2 2016-12-20 15 1 8 8
8 4 2016-12-21 2017-5-4 15 1 9 9
9 4 2017-5-5 2017-12-31 15 1 10 10
10 4 2018-6-1 2020-1-1 15 1 11 11

clipboard.png

需求是查询所有客户最后购买每种商品的单据,按照最后一次购买的时间,包括负数的单据,但不能按ID,因为这套系统当初开发的时候貌似给过一个修改工具,是可以修改订单日期的,目前数据库中的数据很乱
最后期望得到的数据应该是这样的:

id 客户ID 购买日期 到期时间 商品ID 数量 单价 金额
2 1 2018-5-1 2019-6-1 3 1 3 3
4 3 2017-3-15 2018-1-1 8 1 5 5
6 3 2018-7-1 2018-6-1 9 -1 7 -7
10 4 2018-6-1 2020-1-1 15 1 11 11

clipboard.png

阅读 2.4k
1 个回答
//由于题主没有讲明数据列的字段,我这里自己命了名,如下:
//表名 Table_Bill

————————————————————————————————————————————————————————————————————————————
id  |  客户ID  |  购买日期  |  到期日期  |  商品ID  |  数量  |  单价  |  金额
————————————————————————————————————————————————————————————————————————————
Id  |  CusId   |  BuyTime  |  DueTime  | ArticlId |  Num   | Price |  Money
————————————————————————————————————————————————————————————————————————————

SELECT a.*  FROM [Table_Bill] a,(SELECT MAX(BuyTime) AS BuyTime ,ArticlId FROM [Table_Bill] GROUP BY ArticlId) b

WHERE a.BuyTime=b.BuyTime AND a.ArticlId=b.ArticlId 

ORDER BY a.ArticlId

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题