0

このクエリがあります

select 
    substring((convert(varchar, PostTime, 120)), 1, 11),
    AccountNumber,
    sum(Cast(datediff(ss, TranTime, AuthProcessedTime) as money)) / COUNT(1) AverageTime,
    COUNT(1) NumberOfCount 
from 
    AuthTransactions WITH (NOLOCK) 
group by 
    substring((convert(varchar, PostTime, 120)), 1, 11), AccountNumber

このクエリAverageTimeでは、秒になります。HH:MM:SS.msmsmsただし、ほとんどの場合、結果はミリ秒単位で表示されるため、次の形式で表示したいと考えています。では、この形式で結果を見ることは可能ですか?

前もって感謝します。

4

2 に答える 2

2

これを試して:

SELECT
   Convert(date, PostTime) PostDay
   AccountNumber,
   Avg(Datediff(ms, TranTime, AuthProcessedTime) * 1.0) AverageTime,
   Count(*) NumberPerDay
FROM
   dbo.AuthTransactions 
GROUP BY
   Convert(date, PostTime),
   AccountNumber

私が削除または修正したクエリにはいくつかの問題がありました。

  • charデータ型の長さは常に指定してください。
  • 時間部分を削除するために日付を文字列に変換しないでください。DateDiffandを使用するDateAddか、SQL 2008を使用しているため、に変換できますdate
  • 自分が何をしているかを本当に理解していない限り、WITH(NOLOCK)を使用しないでください。それは最終的にあなたを噛むでしょう。
  • お金に変えないでください。それは奇妙なことです。小数点以下2桁ですが、本当に必要な場合は、decimal([something]、2)に変換してください。そうでなければ、誰かがあなたのコードを見て「一体何を?」そして、たとえそれがあなたが望んでいたものであったとしても、あなたのためにそれを「修正」します。私が示したように、1.0を掛けるだけで、十分に正確な10進変換を得ることができます。
  • オブジェクトのスキーマを指定してください。小さいですが、パフォーマンスに役立ち、(間違って覚えていない場合は)そうしないと、不要なプランの再コンパイルが発生する可能性があります。
于 2012-07-16T08:22:25.803 に答える
0

datediff(ss,TranTime,AuthProcessedTime) ss を ms に変更します。ms はミリ秒に使用されます。

このような

select substring((convert(varchar,PostTime,120)),1,11),
AccountNumber,
sum(Cast (datediff(ms,TranTime,AuthProcessedTime)  as money)) / COUNT(1)
AverageTime,COUNT(1) NumberOfCount from AuthTransactions
WITH(NOLOCK) group by 
substring((convert(varchar,PostTime,120)),1,11),AccountNumber
于 2012-07-16T06:50:15.713 に答える