sqlite3 query by max and filter by second factor

前端 未结 3 1417
醉梦人生
醉梦人生 2021-01-27 01:01

I have:

TABLE MESSAGES
 message_id | conversation_id | from_user | timestamp  |  message

I want:

1. SELECT * WHERE from_user &l         


        
3条回答
  •  温柔的废话
    2021-01-27 01:42

    Your query is based on non-standard use of GROUP BY (I think SQLite allows that only for compatibility with MySQL) and I'm not at all sure that it will produce determinate results all the time.

    Plus it uses MAX() on concatenated columns. Unless you somehow ensure that the two (concatenated) columns have fixed widths, the results will not be accurate for that reason as well.

    I would write the query like this:

    SELECT 
        m.message_timestamp, 
        m.message_id, 
        m.message_text,
        m.message_conversationId
    FROM 
        ( SELECT message_conversationId         -- for every conversation
          FROM messages as m
          WHERE message_from <> 'me'            
          GROUP BY message_conversationId
        ) AS mc
      JOIN 
        messages AS m                           -- join to the messages
          ON  m.message_id =        
              ( SELECT mi.message_id            -- and find one message id
                FROM messages AS mi
                WHERE mi.message_conversationId      -- for that conversation
                      = mc.message_conversationId
                  AND mi.message_from <> 'me'
                ORDER BY mi.message_timestamp DESC,  -- according to the
                         mi.message_id DESC          -- specified order
                LIMIT 1                              -- (this is the one part)
              ) ;
    

提交回复
热议问题