请教大家,SQL 语句,要求检索出某订单的最新的一张生产单号

huangbo 发布于 2013/01/14 20:44
阅读 837
收藏 2
有A,B两个表,A表保存所有订单(新单,生产中订单,已经完成的订单等),B表储存已经生产完毕的订单。
OrderID是订单号,一个OrderID对应多个Bill_NO,我想要实现的就是,列出未生产完成的,且一个OrderID只列出与其相关的最新日期的那个Bill_NO。

select Bill_NO from (
select Bill_NO,row_number() over(partition by OrderID order by MakeDate desc) as SN from A
where OrderID not in (select OrderID from B)
)as tmp where SN = 1

我目前是这么写的,但总觉得不爽,款且partition之类的功能新版的SQL SERVER才有,

请教大家,我这个语句如果不用,row_number() over(partition by,那应该怎么写?谢谢!

加载中
0
Y-QTCe
Y-QTCe

select Bill_NO from A where (OrderID,MakeDate) in (select OrderID,max(MakeDate) from A group by OrderID))

这样行么?

0
StormFour
StormFour
使用新功能有什么不好吗?你已经为新功能买单了,为什么不用呢?
0
huangbo
huangbo

引用来自“Y-QTCe”的答案

select Bill_NO from A where (OrderID,MakeDate) in (select OrderID,max(MakeDate) from A group by OrderID))

这样行么?

你好!这样不行的哦。
OrderID对应多个Bill_NO,所以,select OrderID,max(MakeDate)这样出来的结果,使得结果中的OrderID,max(MakeDate)这两个字段是没有任何关联性的。
另外,不太重要的一点是,需要排除B表中已经有的Bill_NO。
不过,很谢谢您的回答。
Y-QTCe
Y-QTCe
你不是说“一个OrderID只列出与其相关的最新日期的那个Bill_NO”吗?
0
huangbo
huangbo

引用来自“StormFour”的答案

使用新功能有什么不好吗?你已经为新功能买单了,为什么不用呢?
好是好,但是我这里的实际情况是SQL SERVER 6.5都还在生产环境中用。当然,准备充足的情况下,升级数据库也不是不行的,但不会因为一条SQL 语句使用了新的语法而升级。
0
huangbo
huangbo
回复 @Y-QTCe :  您好!可能我说的不够详细。补充一下。
A表结构如下,假如我要提取A             3           2012/06/01 这条记录:
OrderID   Bill_NO   MakeDate
A             1           2012/05/01
A             2           2012/04/01
A             3           2012/06/01
B              4          2012/02/01
B              5          2012/04/01
C             6           2012/08/01
……

select Bill_NO from A where (OrderID,MakeDate) in (select OrderID,max(MakeDate) from A group by OrderID)) 这样的写法我不太确定最新版的SQL SERVER是否可以执行,2005以下应该是不行的。不过我查了下,select * from b where 

exists ( select * from a where a.a=b.a and a.b=b.b)

这样是可行的。这样来说,您的答案也是正确的。谢谢!


0
卐卍卍卐
卐卍卍卐

select gg.* from a gg,

(select orderid,max(makedate) md from a group by orderid) qq

where gg.orderid = qq.orderid and gg.makedate = qq.md and not exists (select * from b where gg.orderid = b.orderid)

返回顶部
顶部