gpt4 book ai didi

mysql - 在组内排序?

转载 作者:可可西里 更新时间:2023-11-01 06:30:09 27 4
gpt4 key购买 nike

在我的系统中,我有客户。客户有程序。我想显示一个客户列表,显示他们最近的事件(如果存在)计划。

因此,我们有这样的事情:

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 表示程序未关闭。所以它会将未关闭的程序放在第一位,然后是最近关闭的程序。

问题是,order by 在组内不起作用。它只是随机选择其中一个程序。我该如何解决这个问题?


刚想出这个:

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

这似乎给出了正确的结果。这是正确的,还是我只是走运?也就是说,我在加入表格之前基本上已经对表格进行了排序;这些结果将在连接时保持排序,对吧?


解决方案:我现在相信这是经典group-wise maximum问题。如果您遇到类似问题,请搜索它。解决方案涉及两次连接同一张表。

最佳答案

SELECT  c.*, p.*
FROM clients AS c
JOIN programs AS p
ON p.id =
(
SELECT pi.id
FROM programs AS pi
WHERE pi.client_id = c.id
ORDER BY
pi.close_date=0 DESC, pi.close_date DESC
LIMIT 1
)

谢谢应该去 @Quassnoi 。在类似(但更复杂)的问题中查看他的回答: mysql-group-by-to-display-latest-result


如果您更新 programs table 和套装 close_date对于 close_date='9999-12-31' 为零的所有记录,然后是你的 ORDER BY会更简单(并且使用适当的索引整个查询更快):

        ORDER BY
pi.close_date DESC

关于mysql - 在组内排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com