使用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函数的正确使用,或者可能有更容易的方法来执行此操作。
答案 0 :(得分:1)
我认为你在寻找的是:
SELECT d = CONVERT(DATE, [Timestamp]), c = COUNT(*)
FROM dbo.Transactions
GROUP BY CONVERT(DATE, [Timestamp])
ORDER BY d;
请不要将这种糟糕的转换为字符串技巧来消除时间。为什么呢?
http://www.sqlperformance.com/2012/10/t-sql-queries/trim-time
还要尽量避免使用timestamp
等保留字来表示列名。对于初学者来说,timestamp
是什么?