Выберите строку, когда столбец изменился - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть таблица, в которой хранится информация об изменении объекта и его маркировке.

id  name   markedAt    updatedAt
1   X      2019-01-01  2019-01-01
2   x2     2019-01-01  2019-01-02
3   x2     null        2019-01-03
4   x2     2019-01-04  2019-01-04
5   x3     2019-01-04  2019-01-05
#1 - the object was marked and updated
#2 - the object was updated
#3 - was unmarked
#4 - was marked again
#5 - was updated

Как написать запрос, извлекающий строку, когда объект был отмечен в последний раз,В этом случае я хочу строку # 4.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Сначала необходимо получить максимальную дату where markedat = updatedat для каждого объекта с группировкой по, а затем присоединиться к основной таблице:

select t.* 
from  tablename t
inner join  (
  select 
    name, 
    max(markedat) maxmarkedat
  from tablename 
  where 
    markedat = updatedat
  group by name 
) g 
on g.maxmarkedat = t.updatedat and g.maxmarkedat = t.markedAt and g.name = t.name 
0 голосов
/ 11 февраля 2019

вы можете использовать подзапрос для max marketAt в соединении

    select m.* from  my_table m
    inner join  (
    select name, max(markedAt) max_mark
    from my_table
    group by name 
    ) t on t.markedAt = m.markedAt and t.name = m.name 

это возвращаемое значение для каждого имени .. если вам нужно просто имя = x2, добавьте правильное где

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