表 tabA
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
--------------------------------------------------------
上面数据将返回
2,3两条记录
1.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录2.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
--------------------------------------------------------
上面数据将返回
2,3两条记录
1.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录2.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录
select infoid,max(cretime) cretime
from taba
group by infoid
having max(cretime)<=to_date('2008-5-1','yyyy-mm'dd')
2
select infoid,max(cretime) cretime
from taba
group by infoid
having max(cretime)>=to_date('2008-5-1','yyyy-mm'dd')
group by infoid
having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
2.select infoid from tab1
group by infoid
having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd')
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
--------------------------------------------------------
上面数据将返回
2,3两条记录
FROM TABA
GROUP BY INFOID
HAVING MAX(CRETIME)<=TO_DATE('2008-5-1','YYYY-MM'DD')SELECT INFOID,MAX(CRETIME) CRETIME
FROM TABA
GROUP BY INFOID
HAVING MAX(CRETIME)>=TO_DATE('2008-5-1','YYYY-MM'DD')
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,小于等于2008-5-1的纪录
sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,大于等于2008-5-1的纪录
表 tabB
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
-------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录
最终需要的结果是:
sql5.去掉重复INFOID字段的 sql1+sql3
sql6.去掉重复INFOID字段的 sql2+sql4
注:tabB.INFOID 是 tabA.INFOID的外键 以上面数据为例将返回:
-------------------------------------------------------
INFOID NAME
2 XX1
3 XX2
9 XX4
表 tabA
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,小于等于2008-5-1的纪录
sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,大于等于2008-5-1的纪录 表 tabB
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
-------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录
最终需要的结果是:
sql5.去掉重复INFOID字段的 sql1+sql3
sql6.去掉重复INFOID字段的 sql2+sql4
注:tabB.INFOID 是 tabA.INFOID的外键
以上面数据为例将返回:
-------------------------------------------------------
INFOID NAME
2 XX1
3 XX2
9 XX4
表 tabA
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,小于等于2008-5-1的纪录
sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,大于等于2008-5-1的纪录 表 tabB
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
-------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录
最终需要的结果是:
sql5.去掉重复INFOID字段的 sql1+sql3
sql6.去掉重复INFOID字段的 sql2+sql4
注:tabB.INFOID 是 tabA.INFOID的外键
以上面数据为例将返回:
-------------------------------------------------------
INFOID NAME
2 XX1
3 XX2
9 XX4
INFOID NAME
2 XX1
3 XX2
9 XX4 你的结果按你的逻辑根本出不来这样的的结果
首先看a表
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
info id=1对应name=xx1
你的结果却是
2对应xx1
3应该是对应xx3
你的结果却是对应xx2
sql 3出来的infoid为3
sql5 =去掉sql1+sql3里重复的,那就余下1,2,9sql2没有结果
sql4出来就是infoid 为1,2的
sql6 应该是要么没有结果,要么就是1,2最后sql5+sql6
也最多就是1,2,9
你怎么会出来2,3,9而且name也不一样
现在重新说下啊!表 tabA
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录 sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,大于2008-5-1 且未在tabB表中出现的纪录
表 tabB
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
--------------------------------------------------------
sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于2008-5-1的纪录
最终需要的结果是:
sql5.sql1+sql3
sql6.sql2+sql4
注:tabB.INFOID 是 tabA.INFOID的外键 INFOID NAME
2 XX2
3 XX3
9 XX4
现在重新说下啊!
表 tabA
ID(PK) INFOID(数据保证唯一) CRETIME NAME
1 1 2008-1-1 XX1
2 2 2008-1-1 XX2
3 3 2008-1-1 XX3
4 9 2008-1-1 XX4
sql1.返回表tabA中所有满足下面条件 的INFOID,NAME字段
CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录 sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段
CRETIME字段的日期,大于2008-5-1 且未在tabB表中出现的纪录
表 tabB
ID(PK) INFOID CRETIME
1 1 2008-1-1
2 1 2008-1-2
3 2 2007-1-2
4 3 2003-2-1
5 1 2008-5-2
6 2 2008-1-2
7 2 2008-6-5
--------------------------------------------------------
sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于2008-5-1的纪录
最终需要的结果是:
sql5.sql1+sql3
sql6.sql2+sql4
注:tabB.INFOID 是 tabA.INFOID的外键 INFOID NAME
2 XX2
3 XX3
9 XX4
sql 1
select infoid, name
from taba a
where cretime<=to_date('2008-5-1','yyyy-mm-dd')
and not exists (
select 1
from tabb b.
where a.infoid=b.infoid and a.crtime=b.cretime
)sql 2
select infoid, name
from taba a
where cretime>=to_date('2008-5-1','yyyy-mm-dd')
and not exists (
select 1
from tabb b.
where a.infoid=b.infoid and a.crtime=b.cretime
)其实sql1 和sql2不就是一句嘛 把日期条件去掉出来的结果是一样的,可以合并的sql3 sql41.select infoid from tabb
group by infoid
having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
2.select infoid from tabb
group by infoid
having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd')
CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录
DISTINCT的返回表tabB中所有满足下面条件的INFOID字段
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录你这个sql5.sql1+sql3是什么意思? 就是上面两个结果的UNION!或者用右连接应该也可以吧!tabB.INFOID 是 tabA.INFOID的外键
select infoid, name
from taba a
where cretime<=to_date('2008-5-1','yyyy-mm-dd')
and not exists (
select 1
from tabb b.
where a.infoid=b.infoid and a.crtime=b.cretime
)
union all
select infoid, name
from taba a
where exists
(
select 1 from tabb b
where b.infoid=a.infoid
group by infoid
having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd'))sql6.sql2+sql4
select infoid, name
from taba a
where cretime>=to_date('2008-5-1','yyyy-mm-dd')
and not exists (
select 1
from tabb b.
where a.infoid=b.infoid and a.crtime=b.cretime
)
union all
select infoid, name
from taba a
where exists
(
select 1 from tabb b
where b.infoid=a.infoid
group by infoid
having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd'))
sql 1
select infoid, name
from taba a,tabb b
where cretime<=to_date('2008-5-1','yyyy-mm-dd')
and a.infoid=b.infoid(+) and a.crtime=b.cretime(+)
and b,infoid is null
group by infoid
having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
2.select infoid from tabb
group by infoid
having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd') 这个不行吗?
where credate <=
To_date('2008-08-22','yyyy-mm-dd')
为什么我这里写小于等于8-22日,却只显示 8月22日以前的不显示等于8月22日的!
select * from tab_A
where credate >
To_date('2008-08-22','yyyy-mm-dd')然而我这里写大于8月22日的却把8月22日的都显示出来了...
实际上是2008-08-22 00:00:00
所以当<=实际上基本上不会包括8-22这一天的,除非你的credate正好是2008-08-22 00:00:00
同理,当>时,只要你的credate是2008-08-22 00:00:01,就符合条件,会显示出来的
正确的应该这样几种方法trunc(credate) <=
To_date('2008-08-22','yyyy-mm-dd') trunc(credate) >
To_date('2008-08-22','yyyy-mm-dd')
或者credate <=
To_date('2008-08-22','yyyy-mm-dd') +0.99999
或
credate <=
To_date('2008-08-22 23:59:59','yyyy-mm-dd hh24:mi:ss')
或
credate <=
To_date('2008-08-23','yyyy-mm-dd')
或
to_char(credate,'yyyy-mm-dd')<='2008-08-22'
感谢啊。。我 iq有问题 55
我的qq是923570482
msn是[email protected]
希望能成为朋友啊