我有一个保存票证信息的表,我想知道票证在某个池中停留了多长时间。我写了以下查询:

SELECT FROM_UNIXTIME((MAX(T.transfareDate)-MAX(TMAX.transfareDate)),'%k hours, %i minutes,    %s seconds') AS 'Time to repair'
 FROM  aims_item_group_transfare T
 LEFT JOIN  aims_item_group_transfare TMAX ON T.item_id = TMAX.item_id AND    TMAX.toGroupId=20
 WHERE T.fromGroupId =20


它工作正常,现在我还希望获得以下天数:
天数:小时数:分钟数:秒

任何人都可以帮忙吗?

最佳答案

您可以使用period_diff计算月份差异。请注意,该函数需要"YYYYMM"字符串格式的参数,而不是日期。

select  concat(
            period_diff(
                date_format(DateDiff, '%Y%m')
            ,   '197001') -- 1970-01 = Start of UnixTime
        ,   ' months '
        ,   date_format(
                DateDiff,
                '%k hours, %i minutes, %s seconds')
        ) as TimeToRepair
from    (
        select  from_unixtime(
                    max(T.transfareDate) - max(TMAX.transfareDate)
                ) as DateDiff
        from    aims_item_group_transfare T
        left join
                aims_item_group_transfare TMAX
        on      T.item_id = TMAX.item_id
                and TMAX.toGroupId = 20
        group by
                T.item_id
        ) as SubQueryAlias


Example at SQL Fiddle.

10-04 14:34