[英]ordering grouped items with group by
The following code used to work for Sql Server. 以下代码用于Sql Server。
But I couldnt make it work properly; 但我无法让它正常工作; statuses just wont get in order and display the latest one first. 状态不会按顺序排列并首先显示最新的状态。
How can I fix it? 我该如何解决?
<%
SQL = "SELECT S.MEMBERID, S.StatusMessage, S.StatusPlace, S.StatusCity, S.StatusDateEntered"
SQL = SQL & " FROM STATUSES S"
SQL = SQL & " GROUP BY S.MEMBERID"
SQL = SQL & " ORDER BY S.StatusDateEntered DESC"
Set objStatuses = objConn.Execute(SQL)
%>
Your code isn't working because you're doing GROUP
on MEMBERID
, but you're not aggregating any of the non-grouped columns... which gives you just a random value for every other column for each MEMBERID
... which won't necessarily be the most recent. 您的代码无效,因为您正在MEMBERID
上进行GROUP
,但您没有聚合任何未分组的列...这为您提供了每个MEMBERID
每个其他列的随机值...一定是最近的。 Next, you're ordering by this scrambled data, which isn't what you're expecting. 接下来,您将通过这个加扰数据进行排序,这不是您所期望的。
To fix this, you need to do a groupwise-max , which can be efficiently implemented as a JOIN
to a sub-query containing the MAX(StatusDateEntered)
for each MEMBERID
: 要解决此问题,您需要执行groupwise-max ,这可以有效地实现为包含每个MEMBERID
的MAX(StatusDateEntered)
的子查询的JOIN
:
SELECT
S.MEMBERID,
S.StatusMessage,
S.StatusPlace,
S.StatusCity,
S.StatusDateEntered
FROM
STATUSES S
JOIN (
SELECT MEMBERID, MAX(S2.StatusDateEntered) AS MaxStatusDateEntered
FROM STATUSES
GROUP BY MEMBERID
) S2
ON S.StatusDateEntered = S2.MaxStatusDateEntered
AND S.MEMBERID = S2.MEMBERID
ORDER BY S.StatusDateEntered DESC
Michael thanks a lot for your help. 迈克尔非常感谢你的帮助。 I just found out about the LIMIT clause. 我刚刚发现了LIMIT条款。 It did the trick too. 它也做了伎俩。
SQL = "SELECT S.MEMBERID, S.StatusMessage, S.StatusPlace, S.StatusCity, S.StatusDateEntered"
SQL = SQL & " FROM STATUSES S"
' SQL = SQL & " GROUP BY S.MEMBERID"
SQL = SQL & " ORDER BY S.StatusDateEntered DESC LIMIT 1"
Set objStatuses = objConn.Execute(SQL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.