簡體   English   中英

按分組排序分組項目

[英]ordering grouped items with group by

以下代碼用於Sql Server。
但我無法讓它正常工作; 狀態不會按順序排列並首先顯示最新的狀態。
我該如何解決?

<%
    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)
%>

您的代碼無效,因為您正在MEMBERID上進行GROUP ,但您沒有聚合任何未分組的列...這為您提供了每個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

邁克爾非常感謝你的幫助。 我剛剛發現了LIMIT條款。 它也做了伎倆。

    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