我想爲騎自行車的人通過(可變)數量的檢查點時創建一個mySQL表。我想顯示前行中的結果,在左邊的列(行標題)騎車者信息的表和檢查站(列標題)MySQL交叉表
的基本架構:
CREATE TABLE timing (`Bib` int, `checkpoint` tinytext, `time` datetime);
INSERT INTO timing
(`Bib` , `checkpoint` , `time`)
VALUES
(100, 'CP1', '2016-09-22 01:00:00'),
(101, 'CP1', '2016-09-22 01:30:00'),
(102, 'CP1', '2016-09-22 02:00:00'),
(100, 'CP2', '2016-09-22 02:00:00'),
(101, 'CP2', '2016-09-22 02:30:00'),
(100, 'CP3', '2016-09-22 03:00:00'),
(103, 'CP2', '2016-09-22 04:00:00')
;
SQL :
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'(CASE WHEN checkpoint = ''',
checkpoint,
''' THEN time else 0 END) AS `',
checkpoint, '`'
)
) INTO @sql
FROM timing;
SET @sql
= CONCAT('SELECT Bib, ', @sql, '
from timing
group by Bib');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
結果是不填充整個表,即我只看到騎手第一次通過第一個檢查點。如果我在CONCAT中使用聚合函數,我得到的數值必須轉換回日期時間?當然,我可以只顯示日期時間而無需多個步驟?
我缺少什麼?
TIA。
請添加您的預期輸出 – 1000111