1

次のコードは、SQLServerで機能するために使用されました。
しかし、私はそれを正しく機能させることができませんでした。ステータスが順番に表示されず、最新のものが最初に表示されます。
どうすれば修正できますか?

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

を実行しているため、コードは機能していませんGROUPMEMBERID、グループ化されていない列を集約していません...これにより、各列が1つおきにランダムな値になりますMEMBERID...必ずしもそうなるとは限りません。最新であること。次に、このスクランブルされたデータで注文しますが、これは期待していることではありません。

これを修正するには、 groupwise-maxを実行する必要があります。これは、 foreachを含むサブクエリJOINへの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 に答える