首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql提取数据的有关问题

2012-01-24 
sql提取数据的问题csinfo_work 工作日志表结构如下------------------------------id|username|content---

sql提取数据的问题
csinfo_work 工作日志表结构如下 
------------------------------ 
id|username|content 
------------------------------------ 

csinfo_plun 评论表结构如下 
--------------------------------- 
id|work_id|content|p_name|p_time 
----------------------------------- 


评论表中的ID是标识递增的,work_id是程序写进去的,实际上是csinfo_work表中的ID,因为一篇日志可能很多个人,多篇评论, p_name是写的评论人的名字,在实际应用中,csinfo_plun.p_name=csinfo_work.username的时候叫做反馈的信息,因为评论人等于发布这篇日志的作者,而csinfo_plun.p_name<>csinfo_work.username叫做领导的点评信息

-----------------------------------

需求: 
需要在获得在3天以内的,在自己写过反馈后的所有点评信息和点评的总数

-------------------------------------


在此感谢dawugui的帮助,通过他的解答,以下sql可以提取出最新一条点评信息
----------------------------------------

SQL code
select t1.id,t1.work_id,t1.p_time,t1.p_name from (select n.* from csinfo_work m , csinfo_plun n where m.id = n.work_id and m.username = '张三' and datediff(day,n.p_time,getdate())<= 3) t1 where p_time = (select max(p_time) from (select n.* from csinfo_work m , csinfo_plun n where m.id = n.work_id and m.username = '张三'  and datediff(day,n.p_time,getdate())<= 3) t2 where t2.work_id = t1.work_id) group by t1.id,t1.work_id,t1.p_time,t1.p_name




[解决办法]
SQL code
select  distinct ta.id, ta.work_id,cast(ta.content as varchar(8000)) as content,ta.p_name,ta.p_time from csinfo_plun ta,(select  a.* from csinfo_plun a,csinfo_work b where a.p_name=b.username) tbwhere ta.work_id=tb.work_id and ta.p_time>tb.p_time and datediff(day,tb.p_time,ta.p_time)<=3/**id          work_id     content                                                                                                                                                                                                                                                          p_name   p_time                                                 ----------- ----------- ---------------------------------------------------------------------------------------------------------------- -------- ------------------------------------------------------ 3           1           睡了起来再吃点                                                                                                                                                                                                                                                          王麻子      2009-02-28 00:22:34.0004           1           睡了起来再吃点                                                                                                                                                                                                                                                          王麻子      2009-02-28 00:23:34.0008           3           睡了起来再吃点                                                                                                                                                                                                                                                          王麻子      2009-02-28 00:27:34.000(所影响的行数为 3 行)**/
[解决办法]
SQL code
如果把测试数据中的:insert into csinfo_plun(work_id,content,p_name,p_time)values(3,'大家都吃饱了','张三','2009-02-28 00:26:34')改为insert into csinfo_plun(work_id,content,p_name,p_time)values(3,'大家都吃饱了','李四','2009-02-28 00:26:34')那么结果正确.
------解决方案--------------------


我明白LZ的意思了

有两种情况

1.比如说普通的人写了一篇日志,领导应该先对你的日志进行点评,然后写日志的人对领导的点评再进行反馈
2.如果自己在领导点评的基础上又反馈,领导再次点评的时候,dawugui写的代码正确

在第一种情况的时候plun表中的p_name可能没有work表中的username 


select t1.* from csinfo_plun t1 ,
(select n.* from csinfo_work m , csinfo_plun n where m.id = n.work_id and m.username = n.p_name) t2
where t1.work_id = t2.work_id and t1.p_name <> t2.p_name and datediff(day , t1.p_time , t2.p_time) <= 3 and t1.p_time > t2.p_time

m.username = n.p_name 条件也就不能成立

第二种情况上面的代码显示没问题






热点排行