0

我整个下午都在努力尝试实现这一目标,但没有成功。

我有一个数据库,其中包含有关客户的信息以及他们从商店购买产品的日期。它按我已转换为日期格式的批次 ID 分组。

所以在我的桌子上,我现在有:

CustomerID|Date
1234      |2011-10-18
1234      |2011-10-22
1235      |2011-11-16
1235      |2011-11-17

我想要实现的是查看最近一次购买和最后一次购买之间的天数等等。

例如:

CustomerID|Date       |Outcome
1234      |2011-10-18 |
1234      |2011-10-22 | 4
1235      |2011-11-16 |
1235      |2011-11-17 | 1

我已经尝试将表格加入到自身中,但我遇到的问题是我最终以相同的格式加入。然后我尝试使用我的 join 语句返回它在 <> 匹配日期的位置。

希望这是有道理的,任何帮助表示赞赏。我在这里搜索了所有相关主题。

4

1 回答 1

2

会有多组 CustomerID 吗?或者只是并且总是组合在一起?

DECLARE @myTable TABLE
(
    CustomerID INT,
    Date DATETIME
)

INSERT INTO @myTable
SELECT 1234, '2011-10-14' UNION ALL
SELECT 1234, '2011-10-18' UNION ALL
SELECT 1234, '2011-10-22' UNION ALL
SELECT 1234, '2011-10-26' UNION ALL
SELECT 1235, '2011-11-16' UNION ALL
SELECT 1235, '2011-11-17' UNION ALL 
SELECT 1235, '2011-11-18' UNION ALL
SELECT 1235, '2011-11-19'

SELECT  CustomerID, 
        MIN(date), 
        MAX(date), 
        DATEDIFF(day,MIN(date),MAX(date)) Outcome
FROM @myTable 
GROUP BY CustomerID

SELECT  a.CustomerID, 
        a.[Date], 
        ISNULL(DATEDIFF(DAY, b.[Date], a.[Date]),0) Outcome
FROM 
(
    SELECT  ROW_NUMBER() OVER(PARTITION BY [CustomerID] ORDER BY date) Row,
            CustomerID,
            Date
    FROM @myTable 
) A
LEFT JOIN 
(
    SELECT  ROW_NUMBER() OVER(PARTITION BY [CustomerID] ORDER BY date) Row,
            CustomerID,
            Date
    FROM @myTable 
) B ON a.CustomerID = b.CustomerID AND A.Row = B.Row + 1   
于 2011-11-22T19:17:55.760 回答