我有一个问题表,和一个答案表,答案表有QuestionId一个字段作为问题的答案,现在我想查出的数据显示为一个问题的列表,每一个问题对应一个答案,并且每个答案都最新的显示,不知道该怎么查,我试了很多方法,子查询,内连接查询都不行 有重复的数据。
可类似这样
select e.*,f.* from Email e inner join
(select el.ID,
FKID=(select top 1 ID from Feedback where Email_Id=el.Id order by feedbackdate desc)
from Email as el) et on e.Id = et.Id inner join Feedback f on f.ID=et.FKID
select e.*,f.* from Questions e inner join
(select el.ID,
FKID=(select top 1 ID from Answers where QuestionId=el.Id order by CreateDate desc)
from Questions as el) et on e.Id = et.Id inner join Answers f on f.ID=et.FKID
@Yu: 我觉得快行了,只是查出的问题和答案不对应,是否是排序的问题。
@lhyterry:肯定对应的
@Yu:
@Yu: 不好意思,看错了,谢谢你啊,真的出来了。
@lhyterry: 你好 Yu 能说明下这个实现的原理吗。
我不知道我有没有看明白你的意思,我觉得用下面这个SQL是可以的
select
q.Description as Title,
Answer=(select top 1 Description from Answers where QuestionId=q.Id order by Id desc)
from Questions as q
这个方式 我已经试过了,这个方式Answer表 只能查询一个字段,因为这个表我要查询多个字段,Questions 只要查出问题就行
@lhyterry: 那你用下面这个吧,根据你的字段再稍做一下调整,主要是用到 over(partition by 这个东西
select aa.*,bb.Description as 问题 from
(
select * from
(
select ROW_NUMBER() over(partition by QuestionId order by createTime desc) as row,
QuestionId,Description
from Answers
) a where row=1
) aa join Questions bb on aa.QuestionId=bb.Id
@Alex_QY1987: 我们用的sql2000数据库...
SELECT * FROM ( SELECT *, rownum = ROW_NUMBER() OVER(PARTITION BY t1.Id, ORDER BY t2.CreateDate DESC) FROM Questions t1 LEFT JOIN Answers t2 ON t1.Id = t2.QuestionId ) t WHERE t.rownum = 1