2

使用 SQL Server 2012,我有一个事务列表,每个事务都带有事务发生时间的时间戳。我想显示一列发生交易的日期,第二列显示每个日期发生的交易数。

我已经设法显示交易发生的日期列,但第二部分有问题。我的第一个代码是:

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

它返回交易发生的日期。

我假设对于 select 语句的第二部分,我要查找每天的事务数,我使用完全相同的语句的计数,如下所示:

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

这应该会导致调用第二列NumTransactions,计算每个日期连续记录的次数。我可能误解了正确使用 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-efficient-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 回答