SQL 查询:按两列中的最大值排序

SQL Query: Order by greatest of two columns

我已经尝试了十几种不同的方法来解决这个问题,但我尝试的所有方法都破坏了我的查询...我有以下代码用于在留言板上生成线程循环:

SELECT MB_TOPICS.*, MAX(MB_REPLIES.TIMESTAMP) AS LATEST 
FROM MB_TOPICS
LEFT JOIN MB_REPLIES
ON MB_TOPICS.TOPIC_ID = MB_REPLIES.TOPIC_ID
WHERE MB_TOPICS.CATEGORY_ID='$CATEGORY'
GROUP BY MB_TOPICS.TOPIC_ID
ORDER BY MB_TOPICS.STICKY DESC, LATEST DESC, MB_TOPICS.TIMESTAMP DESC
LIMIT $start,$limit";

这基本上是提取类别中的所有主题,然后通过连接它还从回复中获取最近回复(如果有的话)的时间戳 table.

关于排序,我想将最近活跃的线程保持在顶部...目前(在粘性 Y/N 之后)它按最近的回复排序,然后按线程创建时的时间戳排序... 这是错误的,因为这意味着新线程将出现在具有回复的旧线程之后。我试过

GREATEST(LATEST, MB_TOPICS.TIMESTAMP)

或使用 IIF 语句、ORDER BY 中的 CASE 语句等,但我所做的只是破坏查询,因此不会显示任何结果。我只想这样做,以便无论哪个时间戳是最新的(最后回复或主题创建),它都会按最大值降序排列。我知道这一定很简单,但它今天让我很痛苦。谢谢!

编辑:如果这里的信息有用...对于没有回复的线程,'LATEST' 列将为空...

好的,我终于明白了。我不得不再次使用 MAX() 函数而不是别名,并合并处理空值,结合 RiggsFolly 将其作为新列拉出的建议,导致了这个功能查询:

"SELECT MB_TOPICS.*, MAX(MB_REPLIES.TIMESTAMP) AS LATEST, 
        GREATEST(COALESCE(MAX(MB_REPLIES.TIMESTAMP),0), MB_TOPICS.TIMESTAMP) AS SORT_ORDER
FROM MB_TOPICS
    LEFT JOIN MB_REPLIES ON MB_TOPICS.TOPIC_ID = MB_REPLIES.TOPIC_ID
WHERE MB_TOPICS.CATEGORY_ID='$CATEGORY'
GROUP BY MB_TOPICS.TOPIC_ID
ORDER BY MB_TOPICS.STICKY DESC, SORT_ORDER DESC
LIMIT $start,$limit";

谢谢,如果没有这里的讨论,我就不会到达那里。