Выберите сообщения с самыми большими датами - PullRequest
0 голосов
/ 18 марта 2020
   Message Date       sent received
1. msg     12/03/2020  1      2
2. msg     01/02/2020  2      1
3. msg     03/04/2020  1      2
4. msg     03/05/2020  2      1
5. msg     03/12/2019  1      6
6. msg     03/11/2019  6      1

Эта таблица содержит даты сообщений, отправленных между мной (id = 1) и другими пользователями. Я хочу выбирать последние сообщения между мной и другими пользователями, независимо от того, кто отправил или получил сообщение (поэтому я могу быть на стороне получателя или отправителя).

Результат должен выглядеть примерно так:

   Message Date       sent received
1. msg     03/05/2020  2      1
2. msg     03/12/2019  1      6

Ответы [ 3 ]

1 голос
/ 18 марта 2020

В MySQL 8.0 вы можете сделать это с помощью row_number():

select *
from (
    select 
        t.*,
        row_number() over(
            partition by least(sent, received), greatest(sent, received)
            order by date desc
        ) rn
    from mytable t
    where 1 in (sent, received)
) t
where rn = 1
1 голос
/ 18 марта 2020
SELECT id, message, max(date), sent, received FROM table WHERE sent=1
UNION
SELECT id, message, max(date), sent, received FROM table WHERE received=1

должен дать вам правильный вывод (не проверено).

Этот ответ основан на описании заявки, поскольку данные примера не дают действительного результата для данных образца

0 голосов
/ 18 марта 2020

С NOT EXISTS:

select t.* from tablename t
where 1 in (t.sent, t.received)
and not exists (
  select 1 from tablename
  where (sent, received) in ((t.sent, t.received), (t.received, t.sent)) 
  and date > t.date
)

См. Демоверсию . Результаты:

| Message | Date       | sent | received |
| ------- | ---------- | ---- | -------- |
| 4. msg  | 2020-05-03 | 2    | 1        |
| 5. msg  | 2019-12-03 | 1    | 6        |
...