日期:2014-05-17  浏览次数:20552 次

查询所有订单的最新信息的SQL
本帖最后由 zhoumengkang 于 2013-05-09 17:59:53 编辑
一个订单可能对应N多条数据,订单状态每更新一次就新增一条数据。而不是在原基础上更新。
这样需要查询所有订单的最新信息
百度查询之后自己稀里糊涂写了这句,经过验证,好像结果是正确的,但是不太理解。
求大神解释下,或者提供更好的语句
SELECT *,count(DISTINCT ordernum) FROM xxx group by ordernum order by addtime desc  

------解决方案--------------------
撸主,SELECT * FROM xxx group by ordernum order by addtime desc   得到的结果是group by 之后的第一条数据吧,不一定准确哦。
是否可以如下?
SELECT t.* FROM xxx t
right join (SELECT ordernum ,max(addtime) from xxx) OOXX
on t.ordernum = OOXX.ordernum and t.addtime=OOXX.addtime
order by t.ordernum 
------解决方案--------------------
你这句话执行肯定出错的,GROUP BY ordernum 却SELECT * .
假设订单表为
declare @orders table
(
ID INT IDENTITY(1,1) ,
orderNO VARCHAR(20), --订单编号
CreatedOn datetime, --创建时间
CustomerID int --客户编号
)

insert @orders (orderno,createdon,customerid)
values 'SO2013000001',GETDATE(),1

insert @orders (orderno,createdon,customerid)
values 'SO2013000002',GETDATE(),2

insert @orders (orderno,createdon,customerid)
values 'SO2013000003',GETDATE(),3

insert @orders (orderno,createdon,customerid)
values 'SO2013000004',GETDATE(),4
...

查询最新信息的逻辑就是根据CreatedOn 或ID倒叙排序即可
SELECT top 100 * FROM @orders 
order by CreatedOn 
假设要查询每个客户最近下单时间可以查询
SELECT customerid,MAX(CreatedOn ) LatestDate
Group by customerid



------解决方案--------------------
你说的那个肯定不对的,把你的字段发上来,应该有个时间字段吧,用于确定最新的数据,假设订单号是 id ,时间字段是tim

那就应该是
select a.* from TB  a inner join(select id , max(tim) as tim from   TB group by id)

 b  on a.id=b.id 
and a.tim=b.tim