2013-07-30 58 views
0

我有这个查询,我试图列出一些位置(公园)的顺序,他们有新闻报道附加到他们。以下是查询。按日期排序的MySQL查询不按需要执行

SELECT tpf_news.park_id, date, name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id 
GROUP BY name ORDER BY date DESC 

内加入只是用来从“park_id”得到公园“名称”。我已经使用了GROUP,因为有些公园有不止一个故事,我只希望每个公园都在列表中显示一次。因为我必须在订购之前进行分组,这意味着查询使用的是最近的日期,而不是最近的日期。所以排序是错误的。

如何更改此查询,以便每个公园仍然只会列出一次,但会按照最近的日期到最早的日期正确排序。

谢谢。

回答

0

使用max(date)

SELECT tpf_news.park_id, max(date), name 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id 
GROUP BY name 
ORDER BY max(date) DESC 
+0

这看起来很完美。谢谢。 – user2574794

0

如果你想获得与每个园区相关的最早日期,就需要在该列执行groupwise minimum。那么你的ORDER BY将按照你的预期工作,因为你有正确的日期。

当你做一个GROUP BY查询像你这样的,但没有指定在你的SELECT子句列的集合(如COUNTMIN),MySQL选择要使用其值的行之一。这很难预测或控制,因此您需要使用群组最大值或最小值,如上面的链接所示。