我有一个SQL语句,它根据where子句返回我需要的行,该子句过滤我的customerID,在那里他们成为特定月份的客户。我需要做的是在过去40个月内每月运行一次,但目前这意味着运行SQL 40次并更改日期过滤器。
有没有人知道如何让SQL对这些信息进行分组而不是过滤日期,因为这需要大约15个小时才能完成,因为有50个商店可以运行此查询。
我的SQL:
select count(customerID), date_format(date_time, '%b %Y'), actionID
from transactions
where date_time = (select min(date_time)
from transactions as T
where actionID=2
and date_time > '2010-07-01 00:00:00'
and T.customerID = transactions.customerID)
and store_id= 1
and customerID IN
(
SELECT customerID
FROM transactions
where store_id = 1
and actionID in (1,6)
and date_time > '2010-07-01 00:00:00'
and date_time < '2010-08-01 00:00:00'
)
group by date_format(date_time, '%b %Y')
order by date_time
我正在过滤'2010-07-01 00:00:00'的日期是我真正考虑分组而不是过滤的日期,所以我得到了从2009年7月到2012年10月的每个月的价值。< / p>
非常感谢任何帮助。
谢谢和问候 理查德
答案 0 :(得分:0)
您似乎已经确切地知道您需要什么。您需要一个将date_time截断为月份的列,然后您希望按该列进行分组。
将日期时间截断为本月的第一天并不困难。
SELECT CAST(CONVERT(VARCHAR(7), date_time, 120) + '-1' as DATETIME)
因此,您需要一个执行上述日期转换的初始查询,或者将一个计算列添加到执行此操作的表中,然后按照“每月第一个”列进行分组。