【发布时间】:2012-03-21 16:42:48
【问题描述】:
我有大量的交易日期时间字段可以追溯到几年前。我想在今年和去年的同一时间跨度之间进行比较分析。如何在 3 个月的范围内按周分组?
我在使用 YEARWEEK 和 WEEK 函数时遇到了问题,因为 2012 年的开始日期与 2011 年的开始日期不同。
鉴于我每天都有从 1 月 1 日到当天的日期时间记录,以及上一年具有相同日期时间的记录,我如何按周分组,以便输出与日期相加:2011 年 1 月 1 日, 01/08/2011, 01/15/2011 等,以及 01/01/2012, 01/08/2012, 01/15/2012 等?
到目前为止我的查询如下:
SELECT
DATE_FORMAT(A.transaction_date, '%Y-%m-%d') as date,
ROUND(sum(A.quantity), 3) AS quantity,
ROUND(sum(A.total_amount), 3) AS amount,
A.product_code,
D.fuel_type_code,
D.fuel_type_name,
C.customer_code,
C.customer_name
FROM
cl_transactions AS A
INNER JOIN
card AS B ON A.card_number=B.card_number
INNER JOIN
customer AS C ON B.customer_code=C.customer_code
INNER JOIN
fuel_type AS D ON A.fuel_type=D.fuel_type_code
WHERE
((A.transaction_date >= DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01')) OR (A.transaction_date - INTERVAL 1 YEAR >= DATE_FORMAT(NOW() - INTERVAL 15 MONTH, '%Y-%m-01') AND A.transaction_date <= NOW() - INTERVAL 1 YEAR))
GROUP BY
A.transaction_date, fuel_type_code;
我基本上想要实现以下伪查询的东西:
GROUP BY
STARTING FROM THE OLDEST DATE (A.transaction_date + INTERVAL 6 DAY)
【问题讨论】:
-
如果您希望月份和日期匹配,您似乎需要 MONTH 和 DAYOFMONTH()。
-
@MarcusAdams:我也一直在研究这些日期函数,但正在努力解决如何对 7 天的组求和。