SELECT SUM(price) AS price_sum,
SUM(tax) AS tax_sum,
COUNT(DISTINCT cust_id) AS cust_count,
CONVERT(varchar(13), time_of_order, 120)
+ CASE
WHEN DATEPART(minute, time_of_order) < 30 THEN 'A'
ELSE 'B'
END AS time_chunk_hash
FROM Sales
GROUP BY CONVERT(varchar(13), time_of_order, 120)
+ CASE
WHEN DATEPART(minute, time_of_order) < 30 THEN 'A'
ELSE 'B'
END
ORDER BY CONVERT(varchar(13), time_of_order, 120)
+ CASE
WHEN DATEPART(minute, time_of_order) < 30 THEN 'A'
ELSE 'B'
END
工作示例是在:time_chunk_hash
被用于排序和组的输出,并且将类似于http://sqlfiddle.com/#!3/794ae/12
的计算:
2013-07-28 15A
2013-07-29 15B
其将指示,例如,将7月28日下午3点后的第一个半小时,然后是下半场。
这里呈现相同的查询更可读的方式
SELECT SUM(price) AS price_sum,
SUM(tax) AS tax_sum,
COUNT(DISTINCT cust_id) AS cust_cnt,
time_chunk_hash
FROM
(
SELECT price,
tax,
cust_id,
CONVERT(varchar(13), time_of_order, 120)
+ CASE
WHEN DATEPART(minute, time_of_order) < 30 THEN 'A'
ELSE 'B'
END AS time_chunk_hash
FROM Sales
) HASHED
GROUP BY time_chunk_hash
ORDER BY time_chunk_hash
的工作例子是:
我得到一个错误,指出,“MINUTE”是无法识别的内置函数名称,我需要创建一个分钟列来纠正这个错误?此外,我在上面的帖子中的订单时间不是表格的公园。我只需要用Date_Time替换它是否正确? – user2628624
@ user2628624不需要。将'DatePart(minute,time_of_order)'替换为'MINUTE(time_of_order)''。对于那个很抱歉。文档位于:http://msdn.microsoft.com/en-us/library/ms174420.aspx。我已经更新了我的答案以反映修复。 – Curt
只是为了带领你走下花园的道路,我已经为你添加了一个SQLFiddle示例:http://sqlfiddle.com/#!3/794ae/3 – Curt