[英]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 ,這可以有效地實現為包含每個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
邁克爾非常感謝你的幫助。 我剛剛發現了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.