kc表
kcid kctitle kcis
1 沈阳 1
2 天津 0
3 北京 1
4 上海 1
kb表
kbid jgid(jg表的主键) kcid(kc表主键) kbtitle kbtime hid
1 1 1 沈阳计划会议 2009-2-10 9
2 1 2 北京计划会议 2009-2-10 8
3 1 1 沈阳计划会议 2009-3-10 14
4 1 1 沈阳计划会议 2009-5-10 14
5 1 1 沈阳计划会议 2009-6-10 14
6 2 4 上海会客吃饭 2009-4-10 6
读出一组数据,这些数据满足下面条件
1 . jgid不一样
2 . 相同jgid的数据,只显示一条,并且这条数据中的 kbtime 是大于当前时间,并离当前时间最近的一条
3 . hid=9 or hid=14
4 . kcis=1
按今天是2009-03-26算,大于当前时间,排除了前三条,然后根据 hid=9 or hid=14 ,那么第6条就不满足,只有第4条和第5条,但
相同jgid的只能显示一条,那么 4和5只能显示一条,而且kcis是1的,然后要求显示的是离当前时间最近的一条,最后得到的结果是
bid 为 4的这条
kbid jgid(jg表的主键) kcid(kc表主键) kbtitle kbtime hid
4 1 1 沈阳计划会议 2009-5-10 14
最后显示的结果是
kbid jgtitle kctitle kbtitle kbtime hid
4 开会 沈阳 沈阳计划会议 2009-5-10 14
这个SQL语句该怎么写啊?拜托了
19 个解决方案
#1
昨天不是帮你写过了?
#2
你好象还少了一个表,把昨天的地址帖出来.
#3
Select c.*,b.*
from kb b,kc c
where not exists(select 1 from kb where jgid = b.jgid and kbtime < b.kbtime and kbtime > getdate() )
and hid in (9,14) and kbtime > getdate()
and b.jgid = c.kcid
#4
先对kb表取出数据.
然后联合两外两表查询,你少个表,开会不在了.
select t.* from kb t where kbtime > getdate() and kbtime = (select max(kbtime) from kb where kbtime > getdate() and jgid = t.jgid)
然后联合两外两表查询,你少个表,开会不在了.
#5
try:
select
b.*
from
kb b,kc c
where
b.kcid=c.kcid and c.kcis=1 and (b.hid=9 or b.hid=14)
and
b.kbtime=(select
min(kbtime)
from
kb
where
jgid=b.jgid and kcid=b.kcid and (hid=9 or hid=14) and kbtime>getdate())
#6
declare @kc table(kcid int,kctitle varchar(10),kcis int)
insert into @kc select 1,'沈阳',1
insert into @kc select 2,'天津',0
insert into @kc select 3,'北京',1
insert into @kc select 4,'上海',1
declare @kb table(kbid int,jgid int,kcid int,kbtitle varchar(20),kbtime datetime,hid int)
insert into @kb select 1,1,1,'沈阳计划会议','2009-2-10', 9
insert into @kb select 2,1,2,'北京计划会议','2009-2-10', 8
insert into @kb select 3,1,1,'沈阳计划会议','2009-3-10',14
insert into @kb select 4,1,1,'沈阳计划会议','2009-5-10',14
insert into @kb select 5,1,1,'沈阳计划会议','2009-6-10',14
insert into @kb select 6,2,4,'上海会客吃饭','2009-4-10', 6
select
b.*
from
@kb b,@kc c
where
b.kcid=c.kcid and c.kcis=1 and (b.hid=9 or b.hid=14)
and
b.kbtime=(select
min(kbtime)
from
@kb
where
jgid=b.jgid and kcid=b.kcid and (hid=9 or hid=14) and kbtime>getdate())
/*
kbid jgid kcid kbtitle kbtime hid
----------- ----------- ----------- -------------------- ------------------------------------------------------ -----------
4 1 1 沈阳计划会议 2009-05-10 00:00:00.000 14
*/
#7
不好意思,我读出了,还少了一个
jg表
jgid jgtitle
1 开会
2 吃饭
3 休息
...
我还要读出这里的 jgtitle
jg表
jgid jgtitle
1 开会
2 吃饭
3 休息
...
我还要读出这里的 jgtitle
#8
create table kc(kcid int, kctitle varchar(10), kcis int)
insert into kc values(1 , '沈阳' , 1 )
insert into kc values(2 , '天津' , 0 )
insert into kc values(3 , '北京' , 1 )
insert into kc values(4 , '上海' , 1 )
create table kb(kbid int, jgid int, kcid int, kbtitle varchar(20), kbtime datetime, hid int)
insert into kb values(1 , 1 , 1 , '沈阳计划会议' , '2009-2-10' , 9 )
insert into kb values(2 , 1 , 2 , '北京计划会议' , '2009-2-10' , 8 )
insert into kb values(3 , 1 , 1 , '沈阳计划会议' , '2009-3-10' , 14 )
insert into kb values(4 , 1 , 1 , '沈阳计划会议' , '2009-5-10' , 14 )
insert into kb values(5 , 1 , 1 , '沈阳计划会议' , '2009-6-10' , 14 )
insert into kb values(6 , 2 , 4 , '上海会客吃饭' , '2009-4-10' , 6 )
create table jg(jgid int, jgtitle varchar(10))
insert into jg values(1 , '开会')
insert into jg values(2 , '吃饭')
insert into jg values(3 , '休息')
go
select t1.kbid,
t2.jgtitle ,
t3.kctitle ,
t1.kbtitle ,
t1.kbtime ,
t1.hid
from
(
select t.* from kb t where kbtime > getdate() and (hid=9 or hid=14) and kbtime = (select min(kbtime) from kb where kbtime > getdate() and (hid=9 or hid=14) and jgid = t.jgid)
) t1 , jg t2 , kc t3
where t1.jgid = t2.jgid and t1.kcid = t3.kcid and t3.kcis = 1
drop table kc , kb , jg
/*
kbid jgtitle kctitle kbtitle kbtime hid
----------- ---------- ---------- -------------------- ------------------------------------------------------ -----------
4 开会 沈阳 沈阳计划会议 2009-05-10 00:00:00.000 14
(所影响的行数为 1 行)
*/
#9
这个SQL语句并不满足条件,比如,我在kb这个表中插入数据
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
可以看出,显示的结果是 两条了,他们的jgid是一样的
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
可以看出,显示的结果是 两条了,他们的jgid是一样的
#10
他们同为5-10号,你用哪条?你的需求中没有说明.
#11
我想用的是多条相同的,我想用ID相对于比较小的那个就是kbid相对于小的那个
#12
create table kc(kcid int, kctitle varchar(10), kcis int)
insert into kc values(1 , '沈阳' , 1 )
insert into kc values(2 , '天津' , 0 )
insert into kc values(3 , '北京' , 1 )
insert into kc values(4 , '上海' , 1 )
create table kb(kbid int, jgid int, kcid int, kbtitle varchar(20), kbtime datetime, hid int)
insert into kb values(1 , 1 , 1 , '沈阳计划会议' , '2009-2-10' , 9 )
insert into kb values(2 , 1 , 2 , '北京计划会议' , '2009-2-10' , 8 )
insert into kb values(3 , 1 , 1 , '沈阳计划会议' , '2009-3-10' , 14 )
insert into kb values(4 , 1 , 1 , '沈阳计划会议' , '2009-5-10' , 14 )
insert into kb values(5 , 1 , 1 , '沈阳计划会议' , '2009-6-10' , 14 )
insert into kb values(6 , 2 , 4 , '上海会客吃饭' , '2009-4-10' , 6 )
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
create table jg(jgid int, jgtitle varchar(10))
insert into jg values(1 , '开会')
insert into jg values(2 , '吃饭')
insert into jg values(3 , '休息')
go
select t1.kbid,
t2.jgtitle ,
t3.kctitle ,
t1.kbtitle ,
t1.kbtime ,
t1.hid
from
(
select t.* , px = (select count(1) from kb where kbtime > getdate() and (hid=9 or hid=14) and jgid = t.jgid and (kbtime < t.kbtime or (kbtime = t.kbtime and kbid < t.kbid))) + 1 from kb t where kbtime > getdate() and (hid=9 or hid=14)
) t1 , jg t2 , kc t3
where t1.jgid = t2.jgid and t1.kcid = t3.kcid and t3.kcis = 1 and t1.px = 1
drop table kc , kb , jg
/*
kbid jgtitle kctitle kbtitle kbtime hid
----------- ---------- ---------- -------------------- ------------------------------------------------------ -----------
4 开会 沈阳 沈阳计划会议 2009-05-10 00:00:00.000 14
(所影响的行数为 1 行)
*/
#13
楼上正解了。
#14
帮顶。
#15
不错不错,顶一个
#16
这个还没有结?
#17
上面的SQL语句,我移植到我先前已经做好的数据库中,貌似不对,居然读不出结果来
#18
学习,学习、
真不错
真不错
#19
学习来的
#20
#1
昨天不是帮你写过了?
#2
你好象还少了一个表,把昨天的地址帖出来.
#3
Select c.*,b.*
from kb b,kc c
where not exists(select 1 from kb where jgid = b.jgid and kbtime < b.kbtime and kbtime > getdate() )
and hid in (9,14) and kbtime > getdate()
and b.jgid = c.kcid
#4
先对kb表取出数据.
然后联合两外两表查询,你少个表,开会不在了.
select t.* from kb t where kbtime > getdate() and kbtime = (select max(kbtime) from kb where kbtime > getdate() and jgid = t.jgid)
然后联合两外两表查询,你少个表,开会不在了.
#5
try:
select
b.*
from
kb b,kc c
where
b.kcid=c.kcid and c.kcis=1 and (b.hid=9 or b.hid=14)
and
b.kbtime=(select
min(kbtime)
from
kb
where
jgid=b.jgid and kcid=b.kcid and (hid=9 or hid=14) and kbtime>getdate())
#6
declare @kc table(kcid int,kctitle varchar(10),kcis int)
insert into @kc select 1,'沈阳',1
insert into @kc select 2,'天津',0
insert into @kc select 3,'北京',1
insert into @kc select 4,'上海',1
declare @kb table(kbid int,jgid int,kcid int,kbtitle varchar(20),kbtime datetime,hid int)
insert into @kb select 1,1,1,'沈阳计划会议','2009-2-10', 9
insert into @kb select 2,1,2,'北京计划会议','2009-2-10', 8
insert into @kb select 3,1,1,'沈阳计划会议','2009-3-10',14
insert into @kb select 4,1,1,'沈阳计划会议','2009-5-10',14
insert into @kb select 5,1,1,'沈阳计划会议','2009-6-10',14
insert into @kb select 6,2,4,'上海会客吃饭','2009-4-10', 6
select
b.*
from
@kb b,@kc c
where
b.kcid=c.kcid and c.kcis=1 and (b.hid=9 or b.hid=14)
and
b.kbtime=(select
min(kbtime)
from
@kb
where
jgid=b.jgid and kcid=b.kcid and (hid=9 or hid=14) and kbtime>getdate())
/*
kbid jgid kcid kbtitle kbtime hid
----------- ----------- ----------- -------------------- ------------------------------------------------------ -----------
4 1 1 沈阳计划会议 2009-05-10 00:00:00.000 14
*/
#7
不好意思,我读出了,还少了一个
jg表
jgid jgtitle
1 开会
2 吃饭
3 休息
...
我还要读出这里的 jgtitle
jg表
jgid jgtitle
1 开会
2 吃饭
3 休息
...
我还要读出这里的 jgtitle
#8
create table kc(kcid int, kctitle varchar(10), kcis int)
insert into kc values(1 , '沈阳' , 1 )
insert into kc values(2 , '天津' , 0 )
insert into kc values(3 , '北京' , 1 )
insert into kc values(4 , '上海' , 1 )
create table kb(kbid int, jgid int, kcid int, kbtitle varchar(20), kbtime datetime, hid int)
insert into kb values(1 , 1 , 1 , '沈阳计划会议' , '2009-2-10' , 9 )
insert into kb values(2 , 1 , 2 , '北京计划会议' , '2009-2-10' , 8 )
insert into kb values(3 , 1 , 1 , '沈阳计划会议' , '2009-3-10' , 14 )
insert into kb values(4 , 1 , 1 , '沈阳计划会议' , '2009-5-10' , 14 )
insert into kb values(5 , 1 , 1 , '沈阳计划会议' , '2009-6-10' , 14 )
insert into kb values(6 , 2 , 4 , '上海会客吃饭' , '2009-4-10' , 6 )
create table jg(jgid int, jgtitle varchar(10))
insert into jg values(1 , '开会')
insert into jg values(2 , '吃饭')
insert into jg values(3 , '休息')
go
select t1.kbid,
t2.jgtitle ,
t3.kctitle ,
t1.kbtitle ,
t1.kbtime ,
t1.hid
from
(
select t.* from kb t where kbtime > getdate() and (hid=9 or hid=14) and kbtime = (select min(kbtime) from kb where kbtime > getdate() and (hid=9 or hid=14) and jgid = t.jgid)
) t1 , jg t2 , kc t3
where t1.jgid = t2.jgid and t1.kcid = t3.kcid and t3.kcis = 1
drop table kc , kb , jg
/*
kbid jgtitle kctitle kbtitle kbtime hid
----------- ---------- ---------- -------------------- ------------------------------------------------------ -----------
4 开会 沈阳 沈阳计划会议 2009-05-10 00:00:00.000 14
(所影响的行数为 1 行)
*/
#9
这个SQL语句并不满足条件,比如,我在kb这个表中插入数据
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
可以看出,显示的结果是 两条了,他们的jgid是一样的
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
可以看出,显示的结果是 两条了,他们的jgid是一样的
#10
他们同为5-10号,你用哪条?你的需求中没有说明.
#11
我想用的是多条相同的,我想用ID相对于比较小的那个就是kbid相对于小的那个
#12
create table kc(kcid int, kctitle varchar(10), kcis int)
insert into kc values(1 , '沈阳' , 1 )
insert into kc values(2 , '天津' , 0 )
insert into kc values(3 , '北京' , 1 )
insert into kc values(4 , '上海' , 1 )
create table kb(kbid int, jgid int, kcid int, kbtitle varchar(20), kbtime datetime, hid int)
insert into kb values(1 , 1 , 1 , '沈阳计划会议' , '2009-2-10' , 9 )
insert into kb values(2 , 1 , 2 , '北京计划会议' , '2009-2-10' , 8 )
insert into kb values(3 , 1 , 1 , '沈阳计划会议' , '2009-3-10' , 14 )
insert into kb values(4 , 1 , 1 , '沈阳计划会议' , '2009-5-10' , 14 )
insert into kb values(5 , 1 , 1 , '沈阳计划会议' , '2009-6-10' , 14 )
insert into kb values(6 , 2 , 4 , '上海会客吃饭' , '2009-4-10' , 6 )
insert into kb values(7 , 1 , 1 , '沈阳计划会议adafds' , '2009-5-10' , 14 )
create table jg(jgid int, jgtitle varchar(10))
insert into jg values(1 , '开会')
insert into jg values(2 , '吃饭')
insert into jg values(3 , '休息')
go
select t1.kbid,
t2.jgtitle ,
t3.kctitle ,
t1.kbtitle ,
t1.kbtime ,
t1.hid
from
(
select t.* , px = (select count(1) from kb where kbtime > getdate() and (hid=9 or hid=14) and jgid = t.jgid and (kbtime < t.kbtime or (kbtime = t.kbtime and kbid < t.kbid))) + 1 from kb t where kbtime > getdate() and (hid=9 or hid=14)
) t1 , jg t2 , kc t3
where t1.jgid = t2.jgid and t1.kcid = t3.kcid and t3.kcis = 1 and t1.px = 1
drop table kc , kb , jg
/*
kbid jgtitle kctitle kbtitle kbtime hid
----------- ---------- ---------- -------------------- ------------------------------------------------------ -----------
4 开会 沈阳 沈阳计划会议 2009-05-10 00:00:00.000 14
(所影响的行数为 1 行)
*/
#13
楼上正解了。
#14
帮顶。
#15
不错不错,顶一个
#16
这个还没有结?
#17
上面的SQL语句,我移植到我先前已经做好的数据库中,貌似不对,居然读不出结果来
#18
学习,学习、
真不错
真不错
#19
学习来的