SQL - присоединяйся к себе - PullRequest
       4

SQL - присоединяйся к себе

0 голосов
/ 19 апреля 2019

У меня есть таблица t1, как показано ниже

 -----------------------------
 |    date   |  id   | value |
 -----------------------------
 | 2/28/2019 |  1    | abc1  |
 | 2/28/2019 |  2    | abc2  |
 | 2/28/2019 |  3    | abc3  |
 | 2/27/2019 |  1    | abc4  |
 | 2/27/2019 | 2     | abc5  |
 | 2/27/2019 | 3     | abc3  |
 -----------------------------

Я хочу взять abc3 из t1, а затем найти abc3 значение для date - 1 день в той же таблице t1 и отображать обе записи.

В этом случае было бы 2 записи:

-------------------------------
| date      | id   |  value   |
-------------------------------
| 2/28/2019 |  3   |  abc3    |
| 2/27/2019 |  3   |  abc3    |
-------------------------------

Как этого добиться?Спасибо.

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Это то, что вы хотите?

select t.* 
from t
where value = 'abc3'
order by date desc
limit 2;

Или вы хотите найти abc3, потому что значение одинаково в течение двух последовательных дней?

select t.* 
from t
where value = 'abc3' and
      exists (select 1
              from tablename t2
              where t2.value = t.value and
                    t2.date in (t.date - interval 1 day, t.date + interval 1 day) 
             );
1 голос
/ 19 апреля 2019

Вы можете использовать EXISTS:

select t.* 
from tablename t
where
  value = 'abc3'
  and 
  exists (
    select 1 from tablename
    where value = 'abc3' and date in (t.date - INTERVAL 1 DAY, t.date + INTERVAL 1 DAY) 
  )

См. Демоверсию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...