sql >> データベース >  >> RDS >> Mysql

グループごとの最後の行を取得

    SELECT M.ConversationID, 
    MAX(CASE WHEN M.DateTime = X.FirstRow THEN M.Subject END) AS Subject,
    CAST(COALESCE(MAX(CASE WHEN M.DateTime = X.LastRowSentByOtherUser 
                           THEN M.DateTime END),X.LastRow) AS DateTime)AS LastTime,
    MAX(CASE WHEN M.DateTime = X.LastRow THEN M.Message END) AS Message,
    MAX(CASE WHEN FromID = 1 THEN ToID ELSE FromID END) AS OtherParticipantId
    FROM messages M
    JOIN (
        SELECT ConversationID, MIN(DateTime) AS FirstRow, MAX(DateTime) AS LastRow,
        MAX(CASE WHEN FromID<>1 THEN DateTime END) AS LastRowSentByOtherUser
        FROM messages
        WHERE FromID=1 OR ToID=1
        GROUP BY ConversationID
    ) X ON X.ConversationID = M.ConversationID
    AND (M.DateTime IN (X.FirstRow, X.LastRow, X.LastRowSentByOtherUser))
    GROUP BY M.ConversationID
    HAVING MAX(CASE WHEN M.DateTime = X.LastRowSentByOtherUser 
                       THEN M.DateTime END) IS NOT NULL
    


    1. PHP5.5.xで廃止されたMySQL拡張機能

    2. 結果セットの最後の行のすべての列値の合計と行の合計(group by)を取得するSQLクエリ

    3. MySQLテキスト列が切り捨てられています

    4. SQL IDシーケンスが同期しなくなるのはなぜですか(特にPostgresを使用)?