2

我有一个 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 月每个月的值。

任何帮助将非常感激。

感谢和问候理查德

4

1 回答 1

0

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

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

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

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

于 2012-11-20T12:14:53.483 回答