Как выбрать строку SQL с идентификатором MAX в этом соединении? - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно получить запись с идентификатором MAX из этой объединенной таблицы, но мне нужно только объединить верхнюю строку с основным запросом в этом подзапросе. Как я могу ограничить подзапрос только одной строкой? Ранее возвращался файл tran_state MAX, который работал некорректно.

LEFT JOIN (
   SELECT
     tran_id
     , MAX(id) AS max_tran_id
     , MAX(DATETIME(created, 'America/New_York')) AS max_tran_created
     , tran_state
   FROM `prod.tran` 
   GROUP BY tran_id
   ) data ON t.id = data.tran_id

Я попытался изменить запрос следующим образом, но значение tran_state возвращается как нулевое.

LEFT JOIN (
    SELECT 
    tran_state, 
    tran_id 
    FROM `prod.tran` WHERE ID IN ( 
    SELECT
    MAX(ID)
    FROM `prod.tran` trans 
    WHERE trans.tran_id = transaction_id)
    ) data ON t.id = data.tran_id

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Вы можете использовать оконные функции:

LEFT JOIN
(SELECT t.*,
        ROW_NUMBER() OVER (PARTITION BY t.tran_id ORDER BY t.id DESC) as seqnum
 FROM `prod.tran` t
) data
ON t.id = data.tran_id AND t.seqnum = 1
1 голос
/ 08 мая 2019

Попробуйте этот запрос.

SELECT *
FROM `prod.tran`
WHERE id IN (
    SELECT MAX(id)
    FROM `prod.tran`
    GROUP BY tran_id
) a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...