-1

transaction次のようなテーブルがあります。

transactID    Paydate                   DelDate                     vtid
24            2013-05-08 16:53:03.000   2013-05-08 17:00:28.000     8
25            2013-05-08 16:34:38.000   2013-05-08 17:00:14.000     7

日付の差の合計を取得するために、次のようなクエリを作成しました。

select 
    v.Vtype, 
    SUM(DATEDIFF(MI, t.Paydate, t.DelDate)) as sum_min,
    AVG(CONVERT(NUMERIC(18, 2), DATEDIFF(MI, t.Paydate, t.DelDate))) as avg_min
from 
    Transaction_tbl t 
left join 
    VType_tbl v on t.vtid = v.vtid 
where 
    t.transactID in (24, 25) 
group by 
    v.Vtype

数分で適切な出力が得られます。

Vtype           sum_min     avg_min
----- ----------- ---------------------------------------
Normal             26          26.000000
VIP                7           7.000000 

数分で列を取得する代わりに、sum_min出力を取得したいと考えていますhh:mm:ss。したがって、期待される出力は次のようになります。

Vtype           sum_min              avg_min
----- ----------- ---------------------------------------
Normal            00:26:00          26.000000
VIP                00:7:00           7.000000

これを取得するために、次のようなクエリを書きました。

 SELECT 
     convert(varchar(10), sum(DATEDIFF(hour, t.Paydate, t.DelDate))) + ':' +
     convert(varchar(10), sum(DATEDIFF(minute, t.Paydate, t.DelDate) % 60)) + ':' +
     convert(varchar(10), sum(DATEDIFF(SECOND, t.Paydate, t.DelDate) % 60)) AS 'HH:MM:SS'
FROM 
     Transaction_tbl t 
WHERE 
     t.transactID in (24, 25) 
group by 
     vtid 

しかし、私の出力では、1時間が余分に来ています。このクエリを実行すると、次のような出力が得られます。

 HH:MM:SS
--------------------------------
1:26:36
1:7:25

では、適切な結果を得るためにクエリを書き直すにはどうすればよいでしょうか?

4

2 に答える 2