1

以下代码用于 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)
%>
4

2 回答 2

3

您的代码不起作用,因为您正在执行GROUPon MEMBERID,但是您没有聚合任何未分组的列...这为每个其他列提供了一个随机值MEMBERID...这不一定成为最新的。接下来,您将按这些乱码数据进行排序,这不是您所期望的。

要解决此问题,您需要执行groupwise-max,它可以有效地实现为包含for eachJOIN的子查询:MAX(StatusDateEntered)MEMBERID

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
于 2013-03-04T22:27:18.620 回答
0

迈克尔非常感谢您的帮助。我刚刚发现了 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)
于 2013-03-04T22:43:36.617 回答