问题:
如何限制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”的列除外。
在此先感谢您的协助或建议。
最佳答案
对于试图解决此问题的其他人,我设法使用以下查询来产生所需的结果:
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;
关于mysql - 限制MYSQL数据透视表中显示的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40171184/