如何限制MYSQL数据透视表上显示/生成的列数?
我有一个名为“updates”的表,如下所示:
我有以下查询片段(这只是查询的一部分,整个事情只会从其他表中添加更多列,但这是唯一可以转动的部分):
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(Date = ''',
Date,
''', Description, NULL)) AS ',
CONCAT("'",Date_Format(Date, '%d/%m/%Y'),"'")
)
)INTO @sql
FROM updates;
SET @sql = CONCAT('SELECT Action, ', @sql, ' FROM updates GROUP BY Action');
PREPARE stmt FROM @sql;
EXECUTE stmt;
此查询的结果如下:
正如您所看到的,这会将表格按预期进行调整,并将日期作为列。但是,这些更新(对于操作)有可能在它们“关闭”并且不显示之前变得很长。因此,我想将结果限制为最新的3次更新。但是......没有按行动,因为这可能仍会在数据透视表中给我很多更新。
我希望从更新表中获取最新的3个日期,并保留每个日期的所有更新,保留此数据透视表格式。
示例:上面的结果表看起来相同,但标题为“02/10/2016”和“04/10/2016”的列除外。
提前感谢您的任何帮助或建议。
答案 0 :(得分:0)
对于其他任何试图解决此问题的人,我设法使用以下查询来产生所需的结果:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(Date = ''',
Date,
''', Description, NULL)) AS ',
CONCAT("'",Date_Format(Date, '%d/%m/%Y'),"'")
) ORDER BY Date ASC
) INTO @sql
FROM (
SELECT * FROM updates
GROUP BY Date
ORDER BY Date DESC
LIMIT 2)
AS updates;
SET @sql = CONCAT('SELECT Action, ', @sql, ' FROM updates GROUP BY Action');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;