выбор последних строк на отличное значение внешнего ключа

извините заголовок, я не мог придумать что-то короткое и к точке...

У меня есть таблица 'обновления' с тремя столбцами, текст, идентификатор типа, созданный - текст является текстовым полем, идентификатор типа является внешним ключом от таблицы 'типа', и созданный метка времени. Пользователь вводит обновление, и выберите 'тип', он соответствует также.

Существует соответствующая таблица 'типа' со столбцами 'идентификатор' и 'имя'.

Я пытаюсь закончить с набором результатов со столькими строками, сколько находится в таблице 'типа' и последнем значении от updates.text для конкретной строки в типах. Таким образом, если бы у меня есть 3 типа, 3 строки были бы возвращены, одна строка для каждого типа и новое значение updates.text для рассматриваемого типа.

Какие-либо идеи?

спасибо,

John.

7
задан RedFilter 29 July 2016 в 20:15
поделиться

3 ответа

select u.text, u.typeid, u.created, t.name
from  (
    select typeid, max(created) as MaxCreated
    from updates
    group by typeid
) mu
inner join updates u on mu.typeid = u.typeid and mu.MaxCreated = u.Created
left outer join type t on u.typeid = t.typeid
14
ответ дан 6 December 2019 в 15:22
поделиться

Какие колонки вы хотите вернуть?

SELECT t.*,
       y.*
  FROM TYPE t
  JOIN (SELECT u.typeid,
               MAX(u.created) 'max_created'
          FROM UPDATES u
      GROUP BY u.typeid) x ON x.typeid = t.id
  JOIN UPDATES y ON y.typeid = x.typeid
                AND y.created = x.max_created
0
ответ дан 6 December 2019 в 15:22
поделиться

Я закончил работать вокруг этого, добавив свойство под названием Selrreference, которая просто возвращает это . Если кто-то читает это и имеет лучшее решение, я бы хотел услышать это.

-121--4379599-
SELECT
     TYP.id,
     TYP.name,
     TXT.comment
FROM
     dbo.Types TYP
INNER JOIN dbo.Type_Comments TXT ON
     TXT.type_id = TYP.id
WHERE
     NOT EXISTS
     (
          SELECT
               *
          FROM
               dbo.Type_Comments TXT2
          WHERE
               TXT2.type_id = TYP.id AND
               TXT2.created > TXT.created
     )

или:

SELECT
     TYP.id,
     TYP.name,
     TXT.comment
FROM
     dbo.Types TYP
INNER JOIN dbo.Type_Comments TXT ON
     TXT.type_id = TYP.id
LEFT OUTER JOIN dbo.Type_Comments TXT2 ON
     TXT2.type_id = TYP.id AND
     TXT2.created > TXT.created
WHERE
     TXT2.type_id IS NULL

в любом случае, если создаваемая дата может быть идентична между двумя строками с одинаковым type_id, то вам нужно будет объяснить это.

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

0
ответ дан 6 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: