MySQL INNER JOIN выбирает только первую последнюю созданную строку - PullRequest
0 голосов
/ 04 ноября 2019

Я пробовал и искал весь день перед публикацией, но я не могу понять, как решить мою проблему.

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

ID | Name | RelatedTo | CreatedAt | Revision

По сути, это отслеживание имени документа с его содержимым, и если это, какая ревизия (0,1,2,3, ...) и если это связано с «отцом» документа (необязательно).

Документ может иметь или не иметь ревизию

ID | Name | RelatedTo | CreatedAt | Revision
1  | A    |           | 2019-11-01| 0
2  | B    |           | 2019-11-01| 0
3  |      | 2         | 2019-11-04| 1

Я только начинал с этой записи , но я не могу заставить ее работать в моем случае.

Iнеобходимо выбрать основную запись (например, A и B) и последнее поле CreatedAt (2019-11-01 для A, 2019-11-04 для B).

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Это то, что вам нужно:

select a.RelatedTo
       , max(a.name)
       ,  max(a.m) 
from (select RelatedTo
             , name
             , max(CreatedAt) m 
      from my_table 
      where RelatedTo is not null
      group by RelatedTo
               , name
      union all
      select id
             , name
             , max(CreatedAt) m 
      from my_table 
      where RelatedTo is null
      group by ID
            , name ) a
group by a.RelatedTo
order by a.RelatedTo

Вот это DEMO

0 голосов
/ 04 ноября 2019

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

select m.* 
from  my_table m
inner join  (
  select  name, max(reatedAt) max_date
  from   (
    select  name, createdAt
    from my_table 
    union 
    select m1.name, m2.createdAt
    from my_table m1 
   inner join  my_table m2 ON m1.id = me.RelatedTo
  ) t
  group by name
)  t ON t.name  = m.name 
      and t.max_date  = m.CreatedAt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...