【发布时间】:2014-11-13 01:44:05
【问题描述】:
我有一个包含数年客户数据的门票表。我正在尝试确定访问过 x 次的客户在第一次访问时是否使用了优惠券。我有我正在使用的这个(下面的 SQL),以便我可以分解我正在寻找的组。关于这个群体,我真正想知道的是他们中有多少人在第一次访问时使用了优惠券(最早的 SaleDate)。
;WITH T AS
(
SELECT CustomerId, SaleDate, TotalCoupons,
COUNT(*) OVER (PARTITION BY CustomerID) as Cnt
FROM Store.dbo.Tickets
Where (CreationDate between '2014-1-1' and '2014-11-12')
and (IsDeleted = 0)
And (TicketStatus = 'Complete')
)
SELECT CustomerID, SaleDate, TotalCoupons, Cnt
FROM T
WHERE Cnt = 10
order by CustomerId, SaleDate
作为最终结果,我只需要一个计数,不需要查看 CustomerID、SaleDate 等,我只需要一个(伪)Select Count(CustomerID),其中 TotalCoupons 单元格上有一个值,它是最早的该 CustomerID 的记录。
我想我必须添加一个 RowID 并使用 Where RowID = 1 但我不确定如何将它用于我所做的事情。
【问题讨论】:
标签: sql sql-server-2008 common-table-expression