私の目標は、チケットのタイムスタンプの作成とクローズの時間差を計算できるようにすることです。再オープンした場合は、再オープンからクローズに時間を追加します。次のように、ost_ticket_eventという既存のmySQLテーブルがあります。
このテーブルを下のように表示する必要があります。この場合、状態は動的である可能性があります。つまり、作成、クローズ、割り当て、転送、または再オープンです。 1つのticket_idの状態は、複数回閉じたり開いたりすることができます。
ticket_id//////CREATED///////////////CLOSED//////////////REOPENED/////////////CLOSED2//
1-----------18-01/15 12:00 -------18-01/15 13:00------18-01/15 13:30------18-01/15 14:00
2-----------19-01/15 10:00--------20-01/15 09:00-------------NULL------------NULL
LEFT JOIN Group CONCATを試しましたが、希望の結果が得られないようです。
これは私のクエリです:
SET group_concat_max_len=20000;
SET @a = 0;
SET @b = 0;
SET @num := 0;
SET @ticket_id := '';
SET @line1 = CONCAT (
'SELECT ',
(
SELECT CONCAT('ticket_id,', GROUP_CONCAT(' state',@a:=@a+1,', timestamp',@a))
FROM ost_ticket_event as ts1
WHERE ticket_id =
(
SELECT ticket_id
FROM ost_ticket_event tm
GROUP BY ticket_id
LIMIT 1
)
),
' FROM ost_ticket_event' ,
(
SELECT CONCAT(' ', REPLACE(REPLACE(GROUP_CONCAT(' LEFT JOIN ( SELECT ticket_id as ticket_id',@b:=@b+1,'| state as state',@b,'| timestamp as timestamp',@b,' FROM ( SELECT *| @num := IF(@ticket_id = ticket_id| @num + 1| 1) AS row_number| @ticket_id := ticket_id AS dummy FROM ost_ticket_event ORDER BY ticket_id) AS x',@b,' WHERE x',@b,'.row_number = ',@b,') as t',@b,' ON ticket_id',@b,' = ticket_id'),',',' '),'|',','))
FROM ost_ticket_event as ts2
WHERE ticket_id =
(
SELECT ticket_id
FROM ost_ticket_event tm
GROUP BY ticket_id
LIMIT 1
)
),
' GROUP BY ticket_id'
);
PREPARE my_query FROM @line1;
EXECUTE my_query;
これは出力です:
私はそれを解決しました、誰かが次のクエリがそれをしたことを知りたいのであれば:
SELECT CONCAT(
'SELECT `ost_ticket_event`.ticket_id', GROUP_CONCAT('
, `t_', REPLACE(state, '`', '``'), '`.timestamp
AS `', REPLACE(state, '`', '``'), '`'
SEPARATOR ''),
' FROM `ost_ticket_event` ', GROUP_CONCAT('
LEFT JOIN `ost_ticket_event` AS `t_', REPLACE(state, '`', '``'), '`
ON `ost_ticket_event`. ticket_id = `t_', REPLACE(state, '`', '``'), '`.ticket_id
AND `t_', REPLACE(state, '`', '``'), '`.state = ', QUOTE(state)
SEPARATOR ''),
' GROUP BY `ost_ticket_event`.ticket_id'
) INTO @qry FROM (SELECT DISTINCT state FROM `ost_ticket_event`) t;
PREPARE stmt FROM @qry;
EXECUTE stmt;