尝试找出一个查询,该查询可用于查找在创建首次蜂后在预定时间范围内重复的记录。

举例来说,假设我要确定在上次购物后1个月内下了第二笔订单的客户。

在下面的示例中,汤姆和杰夫都是回头客。但只有Jeff满足在一个月内下第二笔订单的条件:

Record Customer     Date
1      Tom          6/26/2018
2      Carly        6/31/2018
3      Jeff         7/1/2018
4      Jeff         7/20/2018
5      Tom          8/3/2018


我试图在不定义实际日期的情况下解决这个问题,因为我希望在表中首次找到记录时设置开始日期。

SQL可以做到这一点吗?

注意:如果需要指定,请告诉我,英语不是我的母语。

最佳答案

CREATE TABLE Table1
    ([Record] int, [Customer] varchar(5), [Date] datetime)
;

INSERT INTO Table1
    ([Record], [Customer], [Date])
VALUES
    (1, 'Tom', '2018-06-26 00:00:00'),
    (2, 'Carly', '2018-07-01 00:00:00'),
    (3, 'Jeff', '2018-07-01 00:00:00'),
    (4, 'Jeff', '2018-07-20 00:00:00'),
    (5, 'Jeff', '2018-07-23 00:00:00'),
    (6, 'Tom', '2018-08-03 00:00:00')
;




select Customer,count(1) OrderCount from (
  select distinct T1.*
  from Table1 T1
  left join Table1 T2 on
    T1.Record <> T2.Record
    and T1.Customer = T2.Customer
    and DATEDIFF ( month , T1.[Date] , T2.[Date] ) =0
  where T2.Record is not null
) T
group by Customer;




| Customer | OrderCount |
|----------|------------|
|     Jeff |          3 |


Demo SQL Fiddle



希望它可以帮助您:-)

10-02 18:18