【问题标题】:MySQL - SQL Statement Works But Fails to Create VIEWMySQL - SQL 语句有效但无法创建 VIEW
【发布时间】:2018-01-02 11:37:17
【问题描述】:

当我在 Workbench 中运行此 SQL 时,它会产生所需的输出:https://www.dropbox.com/s/4ofodxtwslz228i/Screenshot%202018-01-02%2003.34.25.png?dl=0

但是,当我尝试创建视图时,会出现以下错误: 未知列 'LEAD(latest_20.session_date) OVER (PARTITION BY latest_20.level ORDER BY latest_20.session_date DESC, levelASC)' 在'字段列表'

我做错了什么?

SELECT
*, 
CONCAT(
    `lead_table`.`Session_Count`, ', ',
    DATE_FORMAT(`lead_table`.`Session_Date`, '%c/%e/%Y'), ', ',
    DATE_FORMAT(`lead_table`.`Session_Date`, '%l:%i %p'), ', ',
    if(Timestampdiff(DAY, `lead_table`.`lead`, `lead_table`.`Session_Date`) is null, 'na', Timestampdiff(DAY, `lead_table`.`lead`, `lead_table`.`Session_Date`)), ', ',
    if(Mod(Timestampdiff(hour, `lead_table`.`lead`, `lead_table`.`Session_Date`), 24) is null, 'na', Mod(Timestampdiff(hour, `lead_table`.`lead`, `lead_table`.`Session_Date`), 24)), ', ',
    if(Mod(Timestampdiff(MINUTE, `lead_table`.`lead`, `lead_table`.`Session_Date`), 60) is null, 'na', Mod(Timestampdiff(MINUTE, `lead_table`.`lead`, `lead_table`.`Session_Date`), 60))
) AS comb_label

FROM
(
  SELECT
     *,
     LEAD(`latest_20`.`session_date`) OVER (PARTITION BY `latest_20`.`level` ORDER BY `latest_20`.`session_date` DESC, `level` ASC) AS lead,
     Dayname(Lead(`latest_20`.`session_date`) OVER (PARTITION BY `latest_20`.`level` ORDER BY `latest_20`.`session_date` DESC, `level` ASC)) AS lead_day 
  FROM
     (
        SELECT
           * 
        FROM
           view_performance_accuracy_pct 
        WHERE
           user_id = 1 AND `level` = 'Basic' 
        ORDER BY
           session_date DESC,
           `level` ASC LIMIT 20
    ) AS latest_20 
  ORDER BY latest_20.session_date ASC
) AS lead_table

【问题讨论】:

  • 你用的是什么版本的 MySQL?
  • 我正在运行 MariaDB 10.2,它能够执行多个窗口函数。 SELECT 有效,CREATE a VIEW 无效。
  • 看来,如果我删除“Dayname()...”语句,可以创建一个 VIEW。我不知道为什么。
  • “view_performance_accuracy_pct”是表还是视图?也许在 VIEW 的顶部创建 VIEW 存在限制
  • @twyly,这是一个视图。关于一个视图无法访问另一个视图,我不相信有一个——我已经多次做到这一点。谢谢你的提问。

标签: mysql sql mysql-workbench


【解决方案1】:

请单独指定所有列名,而不是“SELECT *”。 例如

选择 col1, col2, ... FROM

【讨论】:

  • 这背后的逻辑是什么?问题解决了吗??
  • MySQL VIEW 好像找不到真正的列名来构建正确的视图。
  • * 表示来自表的所有列,每列都有它的名称,所以不应该是这样。
  • @Susang,你是对的。指定列名并不能解决问题。
猜你喜欢
  • 2011-07-17
  • 2014-06-08
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多