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

  • 主题发起人 主题发起人 歪哥
  • 开始时间 开始时间
廠商代碼,單價,幣別,生效日期, 失效日期 料號
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
不知道是我沒說清楚還是有人沒看清楚,
如現在的現據出來的結果應該是
4 USD 2005-09-21 2005-09-30 A01
9 RMB 2005-09-21 2005-09-30 A02
2 RMB 2005-11-01 2005-11-20 A03
是每個料號,按最大生效日期,查詢出最大生效日期的單價和幣別
 
上面的在ORACLE中是对的,但在SQL SERVER中无法执行,

下面的这个在SQL SERVER 中是正确答案
select simplePrice ,Money_type,lNO from dd
where sDate in (
--select sDate from
select max(sDate)as sDate
from dd
group by lNo
)
 
select simplePrice ,Money_type,lNO from dd
where sDate in (
select max(sDate)as sDate
from dd
group by lNo
)
 
嗬嗬,楼主不好意思,没有看清楚第一条件。
把语句改成这样就可以了:
select 单价,比别,料号 from table where 生效日期 in (select max(生效日期) from table group by 料号) order by 料号
 
select a.* from table1 a,(select max(生效日期) as 生效日期,料號 from table1 group by 料號) as b
where a.生效日期 = b.生效日期 and a.料號 = b.料號
--没测试
 
来自:无头骑士, 时间:2005-12-2 13:35:27, ID:3283431
select 單價,幣別,料號 from table
where 生效日期 in(
select 生效日期 from (
select max(生效日期)as 生效日期, 料號 from table group by 料號))

這個出來的結果不對,你按我下面的數據去查,A03料號能出來兩個單價

来自:liumangya, 时间:2005-12-2 12:37:18, ID:3283337
select F2,F3,F6 from TABLE a where F4 = (select max(F4) from TABLE b group by F6) and a.F6=b.F6
這個我改了下是不是這樣,好像執行不了
select 單價,幣別,料號 from TABLE a where 生效日期 =(select max(生效日期) from TABLE b group by 料號) and a.料號=b.料號

謝謝angelloi,雖然你給的代碼不能運行(id定義是varchar(1),插入的是'Z01'有3位長,但查詢代碼是對的,是我要的答案,謝謝!
也感謝其它各位!
 
接受答案了.
 
select simplePrice ,Money_type,lNO from dd
where sDate in (
select max(sDate)as sDate
from dd
group by lNo
)
这个对的啊。我加进去A03,查出来是对的。怎么说不对啊?晕死我了。
4 USD A01
9 RMB A02
2 RMB A03
 
不好意思,不是故意不測你的,是我在做打開這個頁面測試的時候,你還沒有回答這個問題,
注意看你的時間與我結貼時只差了2分鐘,我還是按2分鐘之前的頁面在測,有個對的就結貼了,你不說我還沒看到你的.謝謝啦.上面好像還有個14:06的,我也沒看到你的,對不住啦.
 
ak_2005,你的是對的
 
后退
顶部