我正在尝试查询以30分钟为间隔对客户记录进行分组,同时总计30分钟间隔内的客户数量以及每个客户花费的总金额。
我是新手,我正试着把它带到头上。
我使用的是Microsoft SQL 2005。
以下是我的主表格的示例:
Cust_ID (Prime key), Date_time (Time of order), Price, and Sales_Tax
特定日期的时间间隔应介于每小时的0-29
和30-59
之间。
我已经想出如何根据日期范围简单地选择记录。但我在分组功能方面遇到了麻烦。
答案 0 :(得分:0)
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
一个工作示例位于:http://sqlfiddle.com/#!3/794ae/12
计算出的time_chunk_hash
用于对输出进行排序和分组,如下所示:
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
一个工作示例位于:http://sqlfiddle.com/#!3/794ae/11