@Lanserot
как еж в тумане

Как получить лишь одно следующее значение mySql?

У меня есть диалог пользователя с ботом
и мне надо получить каждый следующий ответ пользователя от опр вопроса бота
Я либо получаю либо лишь 1 ответ (после вопроса бота)
Либо все последующие ответы (после вопроса бота)

SELECT min(a.id), a.value
FROM actions AS a
    INNER JOIN (
        SELECT a.call_id, a.id
        FROM calls AS c
            INNER JOIN actions AS a ON a.call_id = c.id
        WHERE
            c.created_at >= '2023-02-05 13:30:00'
            AND c.created_at <= '2023-02-05 13:47:59'
            AND `type` = 'MRCPSynth'
            AND `value` -> "$.key" = 'select_free_dates'
    ) AS act ON a.call_id = act.call_id
WHERE
    a.`type` = 'MRCPRecog'
    AND a.id > act.id
GROUP BY a.value;


Как сделать лимит на каждый where в джоине?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
@Lanserot Автор вопроса
как еж в тумане
В моем случае решение это сломанные ноги (костыли), получаю список всех, потом получаю тех которые ПЕРЕД вопросом, а потом получаю уникальные сравнения

SELECT
    a.value -> "$.text",
    c.guid,
    c.created_at
FROM (
        SELECT ida, min(id) AS id
        FROM (
                SELECT MAX(a.id) AS ida, act.id
                FROM (
                        SELECT a.id, a.call_id
                        FROM (
                                SELECT a.call_id, a.id
                                FROM calls AS c
                                    INNER JOIN actions AS a ON a.call_id = c.id
                                WHERE
                                    c.created_at >= '2023-02-05 13:30:00'
                                    AND c.created_at <= '2023-02-05 13:47:59'
                                    AND `type` = 'MRCPSynth'
                                    AND `value` -> "$.key" = 'select_free_dates'
                            ) AS act
                            INNER JOIN actions AS a ON a.call_id = act.call_id
                        WHERE
                            a.id > act.id
                            AND a.`type` = 'MRCPRecog'
                    ) AS act
                    JOIN actions AS a ON a.call_id = act.call_id
                WHERE
                    a.id < act.id
                    AND a.value -> "$.key" = 'select_free_dates'
                GROUP BY a.id
            ) AS act
        GROUP BY ida
    ) AS act
    INNER JOIN actions AS a ON a.id = act.id
    INNER JOIN calls AS c ON c.id = a.call_id;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
limit 1 добавьте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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