請教一條SQL語句﹐有點意思(100分)

  • 主题发起人 主题发起人 WilliamGui
  • 开始时间 开始时间
W

WilliamGui

Unregistered / Unconfirmed
GUEST, unregistred user!
看下面的表:

主表ID號 內建表ID 起始時間 到期時間
----------------------------------------------
M001 10001 2001-10-10 2001-12-31
M001 1D002 2000-12-25 2001-01-20
M002 10003 2001-05-06 2001-05-26
M001 10004 2001-08-09 2001-08-15
......

表中主表ID是可以重復的﹐內建表ID是唯一的﹐
現在﹐我想得到某一 主表ID 最后一個時間段﹐的內建表ID號
比如說 到期日期 小于 2005-01-01 的每種主表ID號﹐的內建表ID的編號,
符合條件的有:
M001 10001 2001-10-10 2001-12-31
M002 10003 2001-05-06 2001-05-26

結果為:
10001
10003




 
好像4条都满足条件
 
select max(內建表ID) from table1 where 到期時間<='2005-01-01' group by 主表ID號
 
內建表ID 是隨機的﹐不一定從大到小
 
select 內建表ID,max(起始時間) from table1 where 到期時間<='2005-01-01' group by 主表ID號
 
看下面這樣行不行﹖我沒測試﹐只是一個思路。這是求最大日期的﹐你可以自己定義。
select 內建表ID from table1 where 內建表ID in (select 內建表ID,主表ID號,max(到期時間) from table1 group by 內建表ID,主表ID號);
 
max(內建表ID) 换成 max(到期時間)
 
sql server和oracle的时间写法不一样的......
设到期时间要小于的时间为 date1
以下测试通过,但待改善~~~~
select 內建表ID from 表 where (主表ID號,到期时间) in
(select a.主表ID號,max(a.到期时间) from (select 主表ID號, 內建表ID ,到期时间 from 表
where 到期时间< date1
order by 主表ID號, 到期时间 ) a
group by a.主表ID號)
 
[:D]sqlsever还是oracle
 
date1的写法有点不一样而已~~~
自己去试吧~~[^]
 
To eric.youbin, dadabox
有Group by子句的﹐select后的field list只能是用統計函數﹐或Group by子句中進行分組的字段

To Celestial dog:
我未用過 (多個字段) in (查詢子句) 這種形式﹐不過﹐我在sql server 7上試了試﹐
好像行不通﹐不知是不是我弄錯了﹐你用的是Oracle嗎? 我還沒在那上面試過﹐試試再說﹐
那用 sql server 的 SQL 語言﹐又應該怎樣寫?

 
对不起,上面去掉order by 主表ID號, 到期时间 就可以了~~
以下在oracle数据库测试通过
select MXBID
from test
where (ZBID,DQSJ) in
(select a.ZBID,max(a.DQSJ)
from (select ZBID, MXBID ,DQSJ from test where DQSJ<'30-11月-02' ) a
group by a.ZBID)
 
如果用在sql server 上呢
 
sqlserver是一样的,Celestial dog, 的没有问题
 
是一样的吗?
我没用过sql server~~
这次丢脸丢大了[:D]
 
To 一剑封喉:
你試過嗎? 我試了一下好像不行﹐根本就不支持 (多個) in ()

To Celestial dog:
在Oracle上沒問題﹐可惜是...
 
把你试的语句贴出来让大家看一下,好吗?
 
应该是DateTime格式的问题吧
 
试试偶的:
select 内建表ID from 表
where 到期时间=(select max(到期时间) from 表 where 主表ID=:MID)
order by 内建表ID
 
后退
顶部