【问题标题】: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。

标签: mysql variables view count greatest-n-per-group


【解决方案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,所以不幸的是,这不适用于我的实例。我实际上尝试过类似的操作并确认该命令不起作用。
猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2010-10-08
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2021-02-15
相关资源
最近更新 更多