這個SQL語名怎么寫 ( 积分: 50 )

  • 主题发起人 主题发起人 歪哥
  • 开始时间 开始时间

歪哥

Unregistered / Unconfirmed
GUEST, unregistred user!
有一個table欄位爲
廠商代碼,單價,幣別,生效日期, 失效日期 料號
Z01 2 RMB 2005-09-01 2005-09-10 A01
Z01 3 HKD 2005-09-11 2005-09-20 A01
Z01 4 USD 2005-09-21 2005-09-30 A01
Z02 5 RMB 2005-09-01 2005-09-10 A02
Z02 8 RMB 2005-09-11 2005-09-20 A02
Z03 9 RMB 2005-09-21 2005-09-30 A02
要按最大生效日期查出每個料號的單價和幣別,求一句SQL語句得到
結果:
單價,幣別, 料號
4 USD A01
9 RMB A02
在線等
 
有一個table欄位爲
廠商代碼,單價,幣別,生效日期, 失效日期 料號
Z01 2 RMB 2005-09-01 2005-09-10 A01
Z01 3 HKD 2005-09-11 2005-09-20 A01
Z01 4 USD 2005-09-21 2005-09-30 A01
Z02 5 RMB 2005-09-01 2005-09-10 A02
Z02 8 RMB 2005-09-11 2005-09-20 A02
Z03 9 RMB 2005-09-21 2005-09-30 A02
要按最大生效日期查出每個料號的單價和幣別,求一句SQL語句得到
結果:
單價,幣別, 料號
4 USD A01
9 RMB A02
在線等
 
是什么数据库啊?
 
是SQL SERVER 7.0,2000也應該可以
 
在写什么程序啊???
用的什么工具,还是就是只是就是sql里执行啊?
 
就是在sql server 能查出來就行
 
select 单价,比别,料号 from table where 生效日期='+
select max(datepart(year,生效日期)) from table+'-'+
select max(datepart(month,生效日期)) from table+'-'+
select max(datepart(day,生效日期)) from table+''
 
要是有 2005-1-3
2004-9-4 这种情况就不对了
我也是新手,只能想到这种,你自己在组合一下吧。。。。。。
 
用这句试试:
select 单价,比别,料号 from table where 生效日期 in (select max(生效日期) from table)
 
select 單價,幣別,料號, max(生效日期) from table group by 料號
 
select 單價,幣別,料號, max(生效日期) from table group by 單價,幣別,料號
 
select 单价,比别,料号 from table where 生效日期 = (select max(生效日期) from table) 应该这样最大日期就只有一个不用用in
 
select 單價,幣別,料號, max(生效日期) from table group by 料號
 
我一條一條來測試:
来自:eaglefly, 时间:2005-12-1 3:22:38, ID:3281479
用这句试试:
select 单价,比别,料号 from table where 生效日期 in (select max(生效日期) from table)
如果我在表中加兩行數據就不行了
廠商代碼,單價,幣別,生效日期, 失效日期 料號
Z01 2 RMB 2005-09-01 2005-09-10 A01
Z01 3 HKD 2005-09-11 2005-09-20 A01
Z01 4 USD 2005-09-21 2005-09-30 A01
Z02 5 RMB 2005-09-01 2005-09-10 A02
Z02 8 RMB 2005-09-11 2005-09-20 A02
Z03 9 RMB 2005-09-21 2005-09-30 A02
Z01 1 RMB 2005-10-01 2005-10-30 A03
Z02 2 RMB 2005-11-01 2005-11-20 A03

查出結果是
2 RMB 2005-11-01 2005-11-20 A03


来自:漂流的雲, 时间:2005-12-1 7:45:58, ID:3281484
select 單價,幣別,料號, max(生效日期) from table group by 料號
語法錯,group 后要加單價,幣別,執行通不過


来自:xinjinren, 时间:2005-12-1 11:34:40, ID:3281856
select 單價,幣別,料號, max(生效日期) from table group by 單價,幣別,料號
這個是執行結果,不對,我要的是每個料號的最近生效單價,出來的太多了
2.0 RMB A01 2005-09-01 00:00:00.000
2.0 RMB A03 2005-09-20 00:00:00.000
3.0 HKd A01 2005-09-10 00:00:00.000
3.0 RMB A03 2005-10-01 00:00:00.000
4.0 USD A01 2005-09-20 00:00:00.000
5.0 RMB A02 2005-09-01 00:00:00.000
8.0 RMB A02 2005-09-10 00:00:00.000
9.0 RMB A02 2005-09-20 00:00:00.000

来自:tans123, 时间:2005-12-1 14:30:25, ID:3282118
select 单价,比别,料号 from table where 生效日期 = (select max(生效日期) from table) 应该这样最大日期就只有一个不用用in
同第一個,加兩行數據就不行了

来自:bbgsgs, 时间:2005-12-1 14:50:39, ID:3282143
select 單價,幣別,料號, max(生效日期) from table group by 料號
語法錯,執行不了

謝謝各位了,有沒有再好點的辦法
 
select 單價,max(生效日期), 料號 from table group by 單價,料號
记得结账啊。
 
来自:无头骑士, 时间:2005-12-2 11:43:04, ID:3283241
select 單價,max(生效日期), 料號 from table group by 單價,料號
记得结账啊。

你加個幣別試試,不行
 
楼主,你不是按最大生效日期来查询么,按你上面的数据,查出一条是正确的阿,你的最大生效日期是2005-11-01,而符合条件的就只有一条记录阿,怎么不对了?难道你要按生效日期从大到小来查询?

廠商代碼,單價,幣別,生效日期, 失效日期 料號
Z01 2 RMB 2005-09-01 2005-09-10 A01
Z01 3 HKD 2005-09-11 2005-09-20 A01
Z01 4 USD 2005-09-21 2005-09-30 A01
Z02 5 RMB 2005-09-01 2005-09-10 A02
Z02 8 RMB 2005-09-11 2005-09-20 A02
Z03 9 RMB 2005-09-21 2005-09-30 A02
Z01 1 RMB 2005-10-01 2005-10-30 A03
Z02 2 RMB 2005-11-01 2005-11-20 A03
(select 单价,比别,料号 from table where 生效日期 in (select max(生效日期) from table) )
 
select F2,F3,F6 from TABLE a where F4 = (select max(F4) from TABLE b group by F6) and a.F6=b.F6
 
create table pp(
id varchar(1),
simplePrice int,
Money_type varchar(10),
sDate datetime,
eDate datetime,
lNo varchar(10)
)
insert into pp
select
'Z01' , 2 , 'RMB' , '2005-09-01' , '2005-09-10', 'A01'
union all select
'Z01' , 3 , 'HKD' , '2005-09-11', '2005-09-20' , 'A01'
union all select
'Z01' , 4 , 'USD' ,'2005-09-21' , '2005-09-30', 'A01'
union all select
'Z02' , 5 , 'RMB' , '2005-09-01' , '2005-09-10' , 'A02'
union all select
'Z02' , 8 , 'RMB' , '2005-09-11' , '2005-09-20' , 'A02'
union all select
'Z03' , 9 , 'RMB' , '2005-09-21' , '2005-09-30' , 'A02'
select pp.simplePrice,pp.Money_type,pp.lNo from pp right join
( select lNo,max(sDate) sDate from pp group by lNo) bb on
pp.lNo =bb.lNo and pp.sDate =bb.sDate
 
select 單價,幣別,料號 from table
where 生效日期 in(
select 生效日期 from (
select max(生效日期)as 生效日期, 料號 from table group by 料號))

这个绝对正确。
 
后退
顶部