简体   繁体   English

按分组排序分组项目

[英]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 ,这可以有效地实现为包含每个MEMBERIDMAX(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM