2 Вопрос: Как выбрать строку SQL с идентификатором MAX в этом соединении?

вопрос создан в Wed, May 8, 2019 12:00 AM

Мне нужно получить запись с идентификатором 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
    
- 1
  1. Вы можете использовать order by и ограничить количество возвращаемых строк 1.
    2019-05-08 16: 03: 12Z
2 ответа                              2                         

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

SELECT *
FROM `prod.tran`
WHERE id IN (
    SELECT MAX(id)
    FROM `prod.tran`
    GROUP BY tran_id
) a
    
1
2019-05-08 16: 05: 41Z
  1. Я пытался сделать это, но по какой-то причине он возвращает значение null для tran_state. Я добавил новую версию подзапроса в свой вопрос.
    2019-05-08 17: 51: 53Z
  2. @ J.J. Внутренний запрос что-то возвращает?
    2019-05-08 18: 14: 15Z

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

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
2019-05-08 18: 31: 17Z
источник размещен Вот