Как получить максимальное значение value1 из таблицы, где поля value1 и value2 игнорируют поле value2 - PullRequest
0 голосов
/ 21 июня 2019

У меня есть таблица с column1 = date, column2 = A / B, column3 = id.Я хочу результат, где последняя дата по сравнению с Id должна быть с B в столбце 2, игнорировать, если A

Таблица

C1        C2    C3
10/6/19   A      1
12/6/19   B      1
13/6/19   A      2
09/6/19   A      3
03/6/19   B      1
04/6/19   B      2
12/6/19   B      4
03/6/19   A      5
06/6/19   B      3

Ожидаемый результат

C3 1 - Valid . Because last value of latest date is B
C3 4 - Valid . Because last value of latest date is B
C3 3 - Invalid. Because last value of latest date is A

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Используйте коррелированный подзапрос

ДЕМО

select * from t1 a
where c1 =(select max(c1) from t1 b where a.c3=b.c3 )
and c2='B'

ВЫХОД:

c1         c2   c3
2012-06-19  B   1
2012-06-19  B   4
0 голосов
/ 21 июня 2019

Если вам просто нужны значения c3 с индикатором, вы можете использовать агрегирование:

select c3,
       (case when group_concat(c2 order by c1 desc) like 'B,%'
             then 'Valid'
             else 'Invalid'
        end) as flag
from t
group by c3;
0 голосов
/ 21 июня 2019

Столбец Assumin c1 является действительной датой. Вы можете попробовать использовать подзапрос для max (c1)

select  * 
from my_table m 
inner join  (
  select  id,  max(c1) max_c1 
  from my_table  
  group by id  
) t on t.max_c1 = m.c1 and m.c2='A' and t.id = m.id

Или, если вам нужен также идентификатор, не соответствующий вам, добавьте uisng UNION

select  * 
from my_table m 
inner join  (
  select  id,  max(c1) max_c1 
  from my_table  
  group by id  
) t on t.max_c1 = m.c1 and m.c2='A'
select  * 
from my_table m 
inner join  (
  select  id,  max(c1) max_c1 
  from my_table  
  group by id  
) t on t.max_c1 = m.c1 and m.c2='A' and t.id = m.id 

union 

select  max(c1), c2, id
  from my_table where id not in (
  select id 
  from my_table m 
  inner join  (
    select  id,  max(c1) max_c1 
    from my_table  
    group by id  
  ) t on t.max_c1 = m.c1 and m.c2='A'
select  * 
  from my_table m 
  inner join  (
    select  id,  max(c1) max_c1 
    from my_table  
    group by id  
  ) t on t.max_c1 = m.c1 and m.c2='A' and t.id = m.id 
)
group by c2, id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...