在我的系统,我有客户。 客户有计划。 我想显示的客户名单,显示出他们最近活跃的(如果存在)的程序。
因此,我们有这样的事情:
SELECT *
FROM clients AS client
JOIN programs AS program ON client.id=program.client_id
GROUP BY client.id
ORDER BY program.close_date=0 DESC, program.close_date DESC
close_date=0
表示程序未关闭。 所以它会把非关闭程序,然后再最近关闭的程序旁边。
问题是,在组内无法正常工作秩序。 它只是一种挑选随机的节目之一。 我该如何解决这个问题?
只是想出了这一点:
SELECT *
FROM clients AS client
JOIN (SELECT * FROM programs AS program ORDER BY program.close_date=0 DESC, program.close_date DESC) AS program ON client.id=program.client_id
GROUP BY client.id
这似乎给出正确的结果。 这是正确的,还是我刚刚幸运吗? 也就是说,我已经基本上排序表连接上之前; 这些结果将保持排序的,因为它确实的加入,对不对?
解决方案:现在我相信这是一个经典的分组方式最大的问题。 搜索,如果你被困在一个类似的问题。 该解决方案包括加入同一个表两次。