Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何确定客户历史记录的第一条记录中的单元格是否包含值?_Sql_Sql Server 2008_Common Table Expression - Fatal编程技术网

Sql 如何确定客户历史记录的第一条记录中的单元格是否包含值?

Sql 如何确定客户历史记录的第一条记录中的单元格是否包含值?,sql,sql-server-2008,common-table-expression,Sql,Sql Server 2008,Common Table Expression,我有一个Tickets表,可以保存数年的客户数据。我试图确定一位已经访问x次的客户是否在第一次访问时使用了优惠券。我有这个(下面的SQL),我正在使用,以便我可以打破我寻找的组。我真正想知道的是,他们中有多少人在第一次访问(最早的销售日期)时使用了优惠券 作为最终结果,我只需要一个计数,不需要查看CustomerID、SaleDate等,我只需要一个(伪)选择计数(CustomerID),其中TotalCouples单元格上有一个值,它是该CustomerID的最早记录 我想我必须添加一个Row

我有一个Tickets表,可以保存数年的客户数据。我试图确定一位已经访问x次的客户是否在第一次访问时使用了优惠券。我有这个(下面的SQL),我正在使用,以便我可以打破我寻找的组。我真正想知道的是,他们中有多少人在第一次访问(最早的销售日期)时使用了优惠券

作为最终结果,我只需要一个计数,不需要查看CustomerID、SaleDate等,我只需要一个(伪)选择计数(CustomerID),其中TotalCouples单元格上有一个值,它是该CustomerID的最早记录


我想我必须添加一个RowID并使用Where-RowID=1,但我不确定如何将其应用到我所做的工作中

您可以使用
行号()
确定首次就诊,然后使用条件聚合。以下内容获取具有该标志的组中的客户:

WITH T AS (
      SELECT CustomerId, SaleDate, TotalCoupons,
             COUNT(*) OVER (PARTITION BY CustomerID) as Cnt,
             ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY SaleDate) as seqnum
      FROM Store.dbo.Tickets
      Where (CreationDate between '2014-01-01' and '2014-11-12') and
            (IsDeleted = 0) and
            (TicketStatus = 'Complete')
     )
SELECT CustomerID, SaleDate, TotalCoupons, Cnt,
       MAX(CASE WHEN seqnum = 1 and TotalCoupons IS NOT NULL) as HasCouponFirstVisit              
FROM T
WHERE Cnt = 10;
您可以通过执行以下操作来计算它们的数量:

WITH T AS (
      SELECT CustomerId, SaleDate, TotalCoupons,
             COUNT(*) OVER (PARTITION BY CustomerID) as Cnt,
             ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY SaleDate) as seqnum
      FROM Store.dbo.Tickets
      Where (CreationDate between '2014-01-01' and '2014-11-12') and
            (IsDeleted = 0) and
            (TicketStatus = 'Complete')
     )
SELECT COUNT(CustomerID)
FROM T
WHERE Cnt = 10 AND seqnum = 1 AND TotalCoupons IS NOT NULL;
我不确定你要找的是不是
totalcoups不为空
,但它应该足够接近

WITH T AS (
      SELECT CustomerId, SaleDate, TotalCoupons,
             COUNT(*) OVER (PARTITION BY CustomerID) as Cnt,
             ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY SaleDate) as seqnum
      FROM Store.dbo.Tickets
      Where (CreationDate between '2014-01-01' and '2014-11-12') and
            (IsDeleted = 0) and
            (TicketStatus = 'Complete')
     )
SELECT COUNT(CustomerID)
FROM T
WHERE Cnt = 10 AND seqnum = 1 AND TotalCoupons IS NOT NULL;