Как задать переменную в sql и использовать ее в запросе select для отображения и выполнения действий (МАКС. МИН) с этой переменной?

#mysql #sql #mysql-workbench

Вопрос:

Ниже приведен запрос MySQL, который я пытаюсь выполнить. Поэтому в основном мне нужно установить переменную для разницы между текущей датой и последним посещением. И эта переменная мне нужна, чтобы использовать переменную во 2-м запросе для ее отображения или выполнения таких действий, как MAX(@last_visited) или MIN(@last_visited) и т. Д.

 SET @last_visited = (SELECT DATEDIFF(CURRENT_TIMESTAMP, MAX(date_time)) AS last_visited FROM bs_orders GROUP BY user_phone ORDER BY user_phone);

SELECT
    user_phone, @last_visited
FROM
    bs_orders
GROUP BY
    user_phone
ORDER BY 
    user_phone
 

Комментарии:

1. Я заблудился. Примеры данных и желаемые результаты прояснят, что вы пытаетесь сделать. Это SET просто совершенно сбивает с толку. Вы не можете задать одно значение для результатов запроса, возвращающего несколько строк.

Ответ №1:

Вам не нужна переменная, просто вычисляйте ее на лету:

 SELECT
    user_phone, DATEDIFF(CURRENT_TIMESTAMP(), MAX(date_time)) as lastvisited
FROM
    bs_orders
GROUP BY
    user_phone
ORDER BY 
    user_phone
 

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

Также, как сказано в комментариях, вы можете создать временную таблицу и использовать ее в дальнейших запросах:

 CREATE TEMPORARY TABLE lastvisited(

    SELECT
        user_phone, DATEDIFF(CURRENT_TIMESTAMP(), MAX(date_time)) as lastvisited
    FROM
        bs_orders
    GROUP BY
        user_phone
    ORDER BY 
        user_phone
);
 

Пример второго запроса:

 Select * 
from TableT T
left join lastvisited L on L.user_phone=T.user_phone
 

Комментарии:

1. Я попробовал MAX(DATEDIFF(CURRENT_TIMESTAMP, MAX(date_time))) в том же коде, но он не работает.

2. это дает ошибку или не дает вам желаемых результатов?

3. ВЫБЕРИТЕ user_phone, DATEDIFF(ОТМЕТКА ТЕКУЩЕГО ВРЕМЕНИ, МАКС(время даты)) КАК УКАЗАНО В последнем посещении, МАКС(DATEDIFF(МЕТКА ТЕКУЩЕГО ВРЕМЕНИ, МАКС(время даты))) ИЗ ГРУППЫ bs_orders ПО НОМЕРУ телефона пользователя Я попробовал этот код, но он выдает следующую ошибку: Код ошибки: 1111. Недопустимое использование функции группы

4. запрос, который я вставил в ответ, должен действительно дать вам «время с момента последнего посещения». Если вам нужно строго последнее посещение, то должно хватить max(date_time).

5. пожалуйста, попробуйте запрос, который я отправил; функция max нужна только внутри функции datediff