我有这个查询,我试图按照他们附加新闻故事的顺序列出一些位置(公园)。以下是查询。
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 :(得分: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
答案 1 :(得分:0)
如果您想获得与每个公园相关的最早日期,则需要在该列上执行groupwise minimum。然后您的ORDER BY
将按预期工作,因为您的日期正确。
当你执行GROUP BY
查询时,如果没有在select子句中的列上指定聚合(例如COUNT
或MIN
),MySQL会选择其中一个要使用其值的行。这很难预测或控制,因此您需要使用分组最大值或最小值,如上面的链接所示。