sql >> Database teknologi >  >> RDS >> Mysql

Finder seneste besked fra tabel, grupperet efter bruger i mysql

Prøv dette:

vælg *fra beskeder mhvor ikke eksisterer (vælg 1fra beskeder mmhvor (mm.fromuser =m.framuser eller mm.fromuser =m.touser) OG (mm.touser =m.touser eller mm.touser =m.framuser) og mm.timestamp> m.timestamp)og m.fromuser ='bruger1' eller m.touser ='bruger1';

demo her .

Det ville nok være bedre fremover at markere samtaler mellem to brugere som en bestemt samtale, så hører hver besked til en samtale, og dermed bliver det langt nemmere at finde samtaler brugeren er involveret i, og info om beskeder relateret til samtale. I hvert fald.

Prøv denne i stedet. Åh.

select m.* 
  from messages m 
     left join messages m2 
       on ((m.fromuser = m2.fromuser and m.touser = m2.touser) 
           or (m.fromuser = m2.touser and m.touser = m2.fromuser)) 
         and m.timestamp < m2.timestamp 
  where (m.fromuser = 'user1' or m.touser = 'user1') 
  and m2.id is null;

Det er sandsynligvis bedre end not exists version, selvom det lykkes mig at rette den.

denne violin virker faktisk




  1. Påvirker rækkefølgen af ​​tabeller i straight joins, uden antydningsdirektiver, ydeevnen?

  2. Får kun måned og år fra SQL DATE

  3. Oracle Dynamic Pivoting

  4. Find ikke-ASCII-tegn i varchar-kolonner ved hjælp af SQL Server