Группировать по последней записи в запросе на присоединение - PullRequest
0 голосов
/ 28 марта 2019

Вот моя таблица deals_transaction_status_log со следующими полями

id, user_id, deal_transaction_id ,action_status_id, в котором я хочу получить записи с группой на transaction_id с последней записью на (max id).

Эта таблица также объединяет некоторые другие таблицы для получения других данных.

Вот мой запрос

SELECT dtsl.id ,dtsl.deal_transaction_id,dts.id as statusId
    FROM deals_transaction_status_log as dtsl
    JOIN deals_transactions as dt ON dt.id=dtsl.deal_transaction_id AND dt.visitor_id=140
    JOIN DEALS as d ON d.idDeal=dt.deal_id 
    JOIN USER as u ON d.userId=u.idUser
    JOIN deals_transaction_status as dts ON dts.id=dtsl.transaction_status_id
    WHERE dtsl.user_id!=140 AND dtsl.transaction_status_id=14  AND  dtsl.id IN (
                SELECT MAX(dtsl.id)
                FROM deals_transaction_status_log as dtsl
                GROUP BY  dtsl.deal_transaction_id
            ) GROUP BY dtsl.deal_transaction_id

Это работает нормально, однако возвращает только одну запись, даже если у меня более одной записи с одинаковыми deal_transaction_id

например:

Пример ввода

id user_id deal_transaction_id transaction_status_id
1  4        2                  14
2  4        2                  14
3  5        3                  14
4  5        3                  14

Результат

id statusId deal_transaction_id

3   14      3

Ожидаемый результат

id statusId deal_transaction_id

2   14      2
4   14      3

UPDATE

Я только что попробовал ответить fa06 без присоединения

SELECT dtsl.id,dtsl.deal_transaction_id,dtsl.transaction_status_id FROM deals_transaction_status_log as dtsl
WHERE dtsl.id IN (
                SELECT MAX(id)
                FROM deals_transaction_status_log as b where dtsl.transaction_status_id=b.transaction_status_id)
                AND dtsl.transaction_status_id=14
GROUP BY dtsl.deal_transaction_id

Но я все еще получаю только один ряд

1 Ответ

0 голосов
/ 28 марта 2019

использовать коррелированный подзапрос

SELECT dtsl.id ,dtsl.deal_transaction_id,dts.id as statusId
    FROM deals_transaction_status_log as dtsl
    JOIN deals_transactions as dt ON dt.id=dtsl.deal_transaction_id AND dt.visitor_id=140
    JOIN DEALS as d ON d.idDeal=dt.deal_id 
    JOIN USER as u ON d.userId=u.idUser
    JOIN deals_transaction_status as dts ON dts.id=dtsl.transaction_status_id
    WHERE dtsl.user_id!=140 AND dtsl.transaction_status_id=14  AND  dtsl.id IN (
                SELECT MAX(id)
                FROM deals_transaction_status_log as b where dtsl.deal_transaction_id=b.deal_transaction_id)
...