0

我有这个查询,我试图按照它们附有新闻故事的顺序列出多个位置(公园)。下面是查询。

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,因为有些公园附有不止一个故事,我只希望每个公园在列表中显示一次。因为我必须在订购之前进行分组,这意味着查询使用的是公园所附的最早日期,而不是最近的。所以排序是错误的。

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

谢谢。

4

2 回答 2

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
于 2013-07-30T22:24:52.753 回答
0

如果您想获得与每个公园相关联的最早日期,则需要对该列执行分组最小值。然后你ORDER BY会按预期工作,因为你有正确的日期。

当您执行GROUP BY与您类似的查询但未在 select 子句中的列上指定聚合(例如COUNTor MIN)时,MySQL 会选择其中一行来使用其值。这很难预测或控制,因此您需要使用分组最大值或最小值,如上面的链接所示。

于 2013-07-30T22:29:21.713 回答