咨询表
Qid Name
1 Query1
2 Query2
3 Query3对话表
Did Qid Content PostDatetime
1 2 有货吗? 2000/1/1 0:00
2 2 已售完,谢谢 2000/1/1 1:00
3 3 请问什么时候降价? 2000/12/31 0:00
4 3 敬请期待,谢谢 2000/12/31 2:00对话表和咨询表以 Qid 关联。
假设当前时间是 2000/12/31 3:00 求一个SQL,找出所有符合条件的咨询,要求:
该咨询内的对话,最晚的一个对话的发布时间相距当前时间已经超出 48 小时。例如上面表中,Qid为2的咨询所关联的对话中,最后一个发布时间是 2000/1/1 1:00,相距当前时间 2000/12/31 3:00 超过48小时,而Qid 3 则尚未过期,因此执行结果应该是:Qid Name
2 Query2谢谢!
Qid Name
1 Query1
2 Query2
3 Query3对话表
Did Qid Content PostDatetime
1 2 有货吗? 2000/1/1 0:00
2 2 已售完,谢谢 2000/1/1 1:00
3 3 请问什么时候降价? 2000/12/31 0:00
4 3 敬请期待,谢谢 2000/12/31 2:00对话表和咨询表以 Qid 关联。
假设当前时间是 2000/12/31 3:00 求一个SQL,找出所有符合条件的咨询,要求:
该咨询内的对话,最晚的一个对话的发布时间相距当前时间已经超出 48 小时。例如上面表中,Qid为2的咨询所关联的对话中,最后一个发布时间是 2000/1/1 1:00,相距当前时间 2000/12/31 3:00 超过48小时,而Qid 3 则尚未过期,因此执行结果应该是:Qid Name
2 Query2谢谢!
create table 咨询表(Qid int, Name varchar(20))insert into 咨询表
select 1 ,'Query1' union all
select 2 ,'Query2' union all
select 3 ,'Query3'create table 对话表(Did Int,Qid int,Content varchar(30),PostDatetime datetime)insert into 对话表
select 1 , 2 ,'有货吗?' ,'2000/1/1 0:00' union all
select 2 ,2 ,'已售完,谢谢' ,'2000/1/1 1:00' union all
select 3 , 3 ,'请问什么时候降价?' ,'2000/12/31 0:00' union all
select 4 , 3 ,'敬请期待,谢谢' ,'2000/12/31 2:00'
go
select a.*
from 咨询表 a
inner join
(
select qid
from 对话表
group by qid
having datediff(hour,MAX(PostDatetime),'2000/12/31 3:00')>48
)b
on a.qid = b.qid
/*
Qid Name
2 Query2
*/
--找出最晚时间超出48小时的问题
select * from [咨询表] a where a .qid in (select id from [对话表] group by qid having DATEDIFF(dd,max(PostDateTime),GETDATE()))>=48
DROP TABLE 咨询表
create table 咨询表(Qid int, Name varchar(20))insert into 咨询表
select 1 ,'Query1' union all
select 2 ,'Query2' union all
select 3 ,'Query3'
IF OBJECT_ID(N'对话表',N'U') IS NOT NULL
DROP TABLE 对话表
create table 对话表(Did Int,Qid int,Content varchar(30),PostDatetime datetime)insert into 对话表
select 1 , 2 ,'有货吗?' ,'2000/1/1 0:00' union all
select 2 ,2 ,'已售完,谢谢' ,'2000/1/1 1:00' union all
select 3 , 3 ,'请问什么时候降价?' ,'2000/12/31 0:00' union all
select 4 , 3 ,'敬请期待,谢谢' ,'2000/12/31 2:00'GO
DECLARE @time DATETIME
SET @time='2000/12/31 3:00'
SELECT b.* FROM
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY Qid ORDER BY PostDatetime DESC) Sort FROM 对话表
)a,咨询表 b
WHERE a.Qid=b.Qid AND a.Sort=1 AND DATEDIFF(HOUR,a.PostDatetime,@time)>48
/*
Qid Name
----------- --------------------
2 Query2(1 行受影响) */