2013-03-01 138 views
2

使用SQL Server 2012,我有一个事务列表,每个事务都有事务发生时间的时间戳记。我想显示发生交易的日期列和显示每个日期发生的交易次数的第二列。SQL按日期分组行数并显示每个日期的计数

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

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函数的正确使用,或者可能有更简单的方法来做到这一点。

回答

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

+0

谢谢,这工作完美。这是我第一次使用convert函数,我甚至没有考虑过使用Date。其中一个手掌对面的时刻。 – Grant 2013-03-01 20:34:35

+0

我已经给了一个数据库来挖掘各种事情,但我不允许改变数据库本身。我的命名约定会更具描述性。 – Grant 2013-03-01 20:40:13