【发布时间】: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