求 SQL 语句

davidtsui 2013-12-12 09:39:09
咨询表
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

谢谢!
...全文
224 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2013-12-12
  • 打赏
  • 举报
回复

--找出最晚时间超出48小时的问题
select * from [咨询表] a where a .qid in (select id from [对话表] group by qid having  DATEDIFF(dd,max(PostDateTime),GETDATE()))>=48
LongRui888 2013-12-12
  • 打赏
  • 举报
回复

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
*/
ldzyxb 2013-12-12
  • 打赏
  • 举报
回复
treemo 2013-12-12
  • 打赏
  • 举报
回复
jiajiaren 2013-12-12
  • 打赏
  • 举报
回复
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 行受影响)

 */

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧