【发布时间】:2020-10-15 08:11:18
【问题描述】:
我有两个表:一个只有一个名为 date_range 的日期列表(列名为 Date),另一个名为 wp_wpdatatable_1,其中存储了所有日期(每次练习后,都会为每个玩家创建一行,名称为选手(player)、练习日期(date)、时长(sporttrainingduration)、练习组(practiceheldby)等...
现在我想创建一个报告。
我想在每个月的每一天,第一列中的球员姓名以及球员参加训练的每一天我想列出他参加的训练 (wp_wpdatatable_1.practiceheldby)
-- 1. Create an expression that builds the columns
set @sql = (
select group_concat(distinct
concat(
"max(case when date_range.`date`='", date_range.`Date`, "' then `practiceheldby` end) as `", date_range.`Date`, "`"
)
)
from wp_wpdatatable_1, date_range
where date_range.`Date`>=2019-06-01
and date_range.`Date` <= 2019-06-07
);
-- 2. Complete the SQL instruction
set @sql = concat("select `player`, ", @sql , " from wp_wpdatatable_1 group by `player`");
-- 3. Create a prepared statement
PREPARE stmt from @sql;
-- 4. Execute the prepared statement
execute stmt;
DEALLOCATE PREPARE stmt;
我不是职业玩家,我已经玩了 3 到 4 天了。我认为我非常接近,但我收到此错误消息:
从@sql 准备 stmt MySQL 融合:文档
#1064 - SQL 语法中的 Fehler。 Bitte die korrekte Syntax im Handbuch nachschlagen bei 'NULL' in Zeile 1
我错过了什么? 谢谢!
【问题讨论】:
-
打印@sql的内容(选择@sql),你会看到生成的sql,你可能会看到错误的原因。
-
在您的日期加上引号,例如
'2019-06-01'和'2019-06-07'。 -
@tcadidot0 将日期更改为“2019-06-01”有所帮助。现在,什么时候打印 @sql 我得到:选择
player, max(case when date_range.Datum=... 和警告:“警告:#1260 第 13 行被 GROUP_CONCAT() 剪切”@Shadow 谢谢,它可能会引导我找到答案...... -
如果您在 SO 中搜索此警告,您会找到答案:stackoverflow.com/questions/7208773/…
-
2019 减 06 减 01 等于 2012