分组而不是选择在哪里?

时间:2012-11-20 11:59:31

标签: mysql group-by

我有一个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>

非常感谢任何帮助。

谢谢和问候 理查德

1 个答案:

答案 0 :(得分:0)

您似乎已经确切地知道您需要什么。您需要一个将date_time截断为月份的列,然后您希望按该列进行分组。

将日期时间截断为本月的第一天并不困难。

SELECT CAST(CONVERT(VARCHAR(7), date_time, 120) + '-1' as DATETIME)

因此,您需要一个执行上述日期转换的初始查询,或者将一个计算列添加到执行此操作的表中,然后按照“每月第一个”列进行分组。