2

SQL Server 2012 を使用して、トランザクションが発生した時刻のタイムスタンプを含むトランザクションのリストを作成しました。トランザクションが発生した日付の列と、日付ごとに発生したトランザクションの数を示す 2 番目の列を表示したいと考えています。

トランザクションが発生した日付の列を表示することはできましたが、2 番目の部分に問題があります。最初の私のコードは次のとおりです。

select distinct convert(varchar(10), Timestamp, 111) as 'TransactionDates'
from Transactions 

トランザクションが行われた日付を返します。

毎日のトランザクション数を見つけるselectステートメントの2番目の部分では、次のようにまったく同じステートメントのカウントを使用すると仮定します。

select distinct convert( varchar(10), Timestamp, 111) as 'TransactionDates',
count(distinct convert( varchar(10), Timestamp, 111)) as 'NumTransactions'
from Transactions

NumTransactionsこれにより、各日付が連続して記録された回数を示す2 番目の列が呼び出されます。Count 関数の適切な使用法を誤解している可能性があります。あるいは、これを行うためのはるかに簡単な方法があるかもしれません。

4

1 に答える 1

1

あなたが探しているのは次のとおりだと思います:

SELECT d = CONVERT(DATE, [Timestamp]), c = COUNT(*)
FROM dbo.Transactions
GROUP BY CONVERT(DATE, [Timestamp])
ORDER BY d;

時間を削除するために、この文字列へのひどい変換トリックを行わないでください。なんで?

http://www.sqlperformance.com/2012/09/t-sql-queries/what-is-the-most-effective-way-to-trim-time-from-datetime

http://www.sqlperformance.com/2012/10/t-sql-queries/trim-time

timestampまた、列名などに予約語を使用しないようにしてください。timestampまず、何の?

于 2013-03-01T20:23:55.303 に答える