34,838
社区成员




--找出最晚时间超出48小时的问题
select * from [咨询表] a where a .qid in (select id from [对话表] group by qid having DATEDIFF(dd,max(PostDateTime),GETDATE()))>=48
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
*/
IF OBJECT_ID(N'咨询表',N'U') IS NOT NULL
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 行受影响)
*/