我有一个包含Datetime2的列,需要提取,聚合和格式化小时,以便它具有AM / PM。
下表显示了客户每天的访问时间: 我需要对小时进行分组,以便汇总1 pm范围内的所有时间。
处理前:
CustomerID Arrival
1 1:15 PM
2 1:20 PM
3 1:30 PM
4 2:00 PM
5 2:05 PM
6 2:13 PM
我需要输出看起来像下面的格式: 注意:每小时访问是一小时范围内访问的客户总数。所以3个客户 下午1点参观访问,下午2点访问3个。
HourlyVisit Arrival
3 1:00 PM
3 2:00 PM
我尝试了这段代码,我得到了时间并将其汇总,但我需要将时间设置为更易读的格式。
WITH CTE AS
(
SELECT CustomerID = COUNT(CustomerID),
HourlyFrequency = DATENAME(HOUR, Arrival)
FROM MySchema.MyTable
GROUP BY Arrival
)
SELECT HourlyVisit = SUM(CustomerID), HourlyFrequency
FROM CTE
GROUP BY HourlyFrequency
答案 0 :(得分:2)
试试这个:
SELECT CustomerCount = COUNT(*)
, ArrivalHour = STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ')
FROM MySchema.MyTable
GROUP BY STUFF(RIGHT(CONVERT(VARCHAR(20), Arrival, 100), 7), 4, 2, '00 ');
答案 1 :(得分:0)
假设它们是日期时间,您应该能够抓住小时,并使用datepart进行分组。
GROUP BY DATEPART(hh, Arrival)
答案 2 :(得分:0)
WITH CTE AS
(
SELECT CustomerID = COUNT(CustomerID),
HourlyFrequency = DATENAME(HOUR, Arrival)
FROM MySchema.MyTable
GROUP BY Arrival
)
SELECT CustomerID = SUM(CustomerID), RIGHT(CONVERT(CHAR(20), DATEADD(hour,CAST(HourlyFrequency AS INT),0), 22), 11)
FROM CTE
GROUP BY HourlyFrequency
我认为这对您有用,但您应该尝试在客户端进行此类操作。