Как пропустить строки из таблицы в mysql - PullRequest
0 голосов
/ 06 августа 2020

У меня есть одна таблица со следующими данными, я хочу пропустить строку 3, просто хочу получить статус OPEN только один раз, я использую запрос ниже, но он также пропускает строку 5.

    SELECT t.*
FROM emailEvent t
  JOIN 
    ( SELECT MIN(id) AS minid
      FROM emailEvent WHERE email_id = 3
      GROUP BY status
    ) AS grp
    ON grp.minid = t.id
WHERE (t.email_id = 3)

Я придумал это как решение, но не уверен, есть ли другое лучшее решение для этого

 SELECT t.*
FROM emailEvent t
WHERE t.status != "Open" and t.email_id = 3
UNION
(
SELECT et.*
FROM emailEvent et
WHERE et.status = "Open" and et.email_id = 3
ORDER BY et.createdAt DESC LIMIT 1
)

enter image description here

I want the result to be look like something like this введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 06 августа 2020
SELECT *
FROM
 (
   SELECT t.*, 
      min(id) over (partition by status) as min_id
   FROM emailEvent t
   WHERE (t.email_id = 3)   -- only email 3
 ) AS dt
WHERE id = min_id           -- only for 'Open' status
   OR status <> 'Open'

Для более старых версий, не поддерживающих Оконные агрегаты :

select * 
from emailEvent
where email_id = 3
and 
  (
   e.status <> 'Open'
   or id in (select min(id)  -- only for 'Open' status
          from emailEvent 
          where status = 'Open'
          and email_id = 3)
  )
1 голос
/ 06 августа 2020

С NOT EXISTS:

select e.* from emailEvent e
where e.status <> 'Open'
or not exists (select 1 from emailEvent where status = e.status and id < e.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...