这是一个小提琴:SQLFIDDLE
如果你查看我的子查询select location ids and order them by the sort column
。 我想通过我在子查询中选择的我的locids的排列来排序我的最终结果集。因此,例如,它应该对位置3166,然后是位置269,然后位置3572 {{1 }}
最后,我想限制为每个位置一次审核(这意味着我想按创建的评论排序),这就是我使用locid组的原因。
因此,对于最终结果集,我应该(按此顺序):
评论第16行
评论第19行
评论第24行
此结果集满足以下要求(按顺序):
按位置表
根据分类的位置检索最新评论
感谢您的帮助。如果您需要任何进一步的信息,请不要犹豫。
更新
我需要的是按位置排序列排序的评论列表,然后是评论创建日期,每个位置的限制为1。 如果你能以另一种方式解决,请告诉我。感谢
第二次更新
我已经开始尝试使用内部联接,但我无法获得要显示的最佳创建记录。 SQLFIDDLE TWO
答案 0 :(得分:0)
select *
时, group by
完全不合适。聚合查询应具有聚合函数。
您的问题的一般答案是使用join
。此类查询的示例如下所示:
select r.locid, count(*), max(r.createdate)
from reviews r join
locations l
on r.locid = l.locid
group by locid
order by sort;
答案 1 :(得分:0)
!编辑:清楚了解排序列的用途...... 这应该是您正在寻找的东西:sqlfiddle.com /#!9 / fa15b / 9
SELECT r.reviewid, r.locid, r.title, r.createdate, l.sort
FROM reviews r
INNER JOIN locations l ON l.locid = r.locid
WHERE r.reviewid IN
(SELECT MAX(r2.reviewid) FROM reviews r2
GROUP BY r2.locid)
ORDER BY l.sort
解释;我将尝试尽可能彻底地解释这一点,以便如果有其他人遇到这个,那就有意义了。
让我们从我们需要的东西开始"来自这个查询:
我们一次只能解决一个问题:
加入有评论的地点就像听起来一样简单。我们在关键字" locid"上的评论和位置之间运行SQL JOIN,为我们提供仅包含评论的位置的结果集(反之亦然)
下一个最简单的事情就是按照你的排序"排序"柱。因此," ORDER BY l.sort"。这给我们留下了所有评论/位置映射的完整列表。
最后一项是仅挑选每个位置的最新评论。由于reviewid是按升序排列的数字,因此选择日期与审核ID的结果相同,而且reviewid对我来说更容易。
附加说明: