如何在 sql 中设置变量并在选择查询中使用它来显示和执行对该变量的操作(MAX MIN)?
Posted
技术标签:
【中文标题】如何在 sql 中设置变量并在选择查询中使用它来显示和执行对该变量的操作(MAX MIN)?【英文标题】:How to set a variable in sql and use it in select query to display and perform actions (MAX MIN) on that variable? 【发布时间】:2021-06-03 09:08:06 【问题描述】:下面是我尝试运行的 mysql 查询。所以基本上我需要为当前日期和上次访问日期之间的差异设置一个变量。我需要在第二个查询中使用该变量来显示它或执行诸如 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
【问题讨论】:
我迷路了。样本数据和期望的结果将清楚地表明您正在尝试做什么。SET
完全令人困惑。您不能为返回多行的查询结果设置单个值。
【参考方案1】:
您不需要变量,只需即时计算即可:
SELECT
user_phone, DATEDIFF(CURRENT_TIMESTAMP(), MAX(date_time)) as lastvisited
FROM
bs_orders
GROUP BY
user_phone
ORDER BY
user_phone
如果您愿意,您可以在运行查询之前使用当前时间戳创建一个变量,以便查询对所有行使用相同的时间。
正如在 cmets 中所说,您可以创建一个临时表并在进一步的查询中使用它:
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
【讨论】:
我在相同的代码中尝试了 MAX(DATEDIFF(CURRENT_TIMESTAMP, MAX(date_time))),但它不起作用。 是报错还是没有给你想要的结果? SELECT user_phone, DATEDIFF(CURRENT_TIMESTAMP, MAX(date_time)) AS last_visited, MAX(DATEDIFF(CURRENT_TIMESTAMP, MAX(date_time))) FROM bs_orders GROUP BY user_phone ORDER BY user_phone 我试过这个代码,但它给我的错误如下:错误代码:1111。无效使用组函数 我在答案中的查询应该给你“自上次访问以来的时间”。如果您需要严格的最后一次访问,那么 max(date_time) 就足够了。 请尝试我发布的查询; max 函数只需要在 datediff 函数内部以上是关于如何在 sql 中设置变量并在选择查询中使用它来显示和执行对该变量的操作(MAX MIN)?的主要内容,如果未能解决你的问题,请参考以下文章