在视图中使用变量的替代方法
Posted
技术标签:
【中文标题】在视图中使用变量的替代方法【英文标题】:Alternative to using Variable in a View 【发布时间】:2021-02-25 19:04:14 【问题描述】:我需要一些帮助来构建一个 SQL 语句,该语句将输出每个客户端的前 5 个退役资产,这些资产可以放入 SQL 视图中。
我已经构建了以下 SQL 语句,但它在视图中不起作用,需要替代方法。
SET @row_number := 0;
SELECT DISTINCT NAME, RetiredDate, COMMENT,
@row_number:=CASE WHEN @client_ID=clientID THEN @row_number+1 ELSE 1 END AS num,
@client_ID:=clientID ClientID
FROM `retiredassets`
WHERE `retiredassets`.`ClientID` IN(SELECT clientID FROM `clients`)
HAVING num <=5
有人对我有什么建议吗?上述语句完美运行,但不能在 SQL 视图中运行。
【问题讨论】:
你运行的是哪个版本的 mysql? 我们目前使用的是 MySQL 5.7。 【参考方案1】:在 MySQL 8.0 中应该是:
WITH cte AS (
SELECT r.NAME, r.RetiredDate, r.COMMENT,
ROW_NUMBER() OVER (PARTITION BY r.ClientID ORDER BY ...) AS num,
r.ClientID
FROM retiredassets
JOIN clients USING (ClientID)
)
SELECT * FROM cte WHERE num <= 5;
我离开了...
,因为我不知道您的订单是什么。您的原始查询未指定订单,因此您必须选择一个。
请回复您的评论。
如果不能升级到 MySQL 8.0,并且不能在 VIEW 定义中使用变量,那么就不能使用 VIEW。使用时必须写出完整的查询,直到可以升级到 MySQL 8.0。
【讨论】:
我们实际上使用的是 MySQL Server 5.7,所以不幸的是,这不适用于我的实例。我实际上尝试过类似的操作并确认该命令不起作用。以上是关于在视图中使用变量的替代方法的主要内容,如果未能解决你的问题,请参考以下文章