Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 - Fatal编程技术网

Sql 如何从主查询中筛选子查询结果

Sql 如何从主查询中筛选子查询结果,sql,sql-server,Sql,Sql Server,我有一个查询,用于检查客户交易记录与上次交易记录: SELECT t.CustomerID, t.ServiceID, t.dtCreated, Upgraded = CASE WHEN t.ServiceID = cp.ServiceID THEN 0 ELSE 1 END FROM Transactions AS t INNER JOIN ( SELECT CustomerID,

我有一个查询,用于检查客户交易记录与上次交易记录:

SELECT  t.CustomerID,
        t.ServiceID,
        t.dtCreated,
        Upgraded = CASE WHEN t.ServiceID = cp.ServiceID THEN 0 ELSE 1 END
FROM    Transactions AS t
        INNER JOIN
        (   SELECT  CustomerID,
                    ServiceID,
                    dtCreated,
                    RowNumber = ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY dtCreated DESC)
            FROM    Transactions
            WHERE   transactiontype = 'Cust Purchase'
        ) AS cp
            ON cp.CustomerID = t.CustomerID
            AND cp.RowNumber = 1
WHERE   t.dtcreated > @startdate 
AND     t.dtcreated < @enddate
AND     t.transactiontype = 'Cust Save'
您将看到客户3购买了1/4/15。我想要在客户保存之前的最后一次客户购买。因此,在这种情况下,我希望客户购买日期为'12/18/14'

我试过:

SELECT  t.CustomerID,
            t.ServiceID,
            t.dtCreated,
            Upgraded = CASE WHEN t.ServiceID = cp.ServiceID THEN 0 ELSE 1 END
    FROM    Transactions AS t
            INNER JOIN
            (   SELECT  CustomerID,
                        ServiceID,
                        dtCreated,
                        RowNumber = ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY dtCreated DESC)
                FROM    Transactions
                WHERE   transactiontype = 'Cust Purchase' **and dtcreated < t.dtcreated**
            ) AS cp
                ON cp.CustomerID = t.CustomerID
                AND cp.RowNumber = 1
    WHERE   t.dtcreated > @startdate 
    AND     t.dtcreated < @enddate
    AND     t.transactiontype = 'Cust Save'

那么您想要筛选还是订购?我想要在“Cust Save”中找到的每个记录的“Cust Save”交易之前发生的Cust PURSE类型的最新交易不是:在“Cust Save”中找到的每个记录的最新交易看起来像是您可以使用外部应用选择前1。。。从交易t2,其中。。。和t2.dtCreatedSELECT t.CustomerID, t.ServiceID, t.dtCreated, Upgraded = CASE WHEN t.ServiceID = cp.ServiceID THEN 0 ELSE 1 END FROM Transactions AS t INNER JOIN ( SELECT CustomerID, ServiceID, dtCreated, RowNumber = ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY dtCreated DESC) FROM Transactions WHERE transactiontype = 'Cust Purchase' **and dtcreated < t.dtcreated** ) AS cp ON cp.CustomerID = t.CustomerID AND cp.RowNumber = 1 WHERE t.dtcreated > @startdate AND t.dtcreated < @enddate AND t.transactiontype = 'Cust Save'
SELECT  t.CustomerID,
        t.ServiceID,
        t.dtCreated,
        MAX(cp.dtCreated) OVER (PARTITION BY t.CustomerID) as cp_dtCreated
        Upgraded = CASE WHEN t.ServiceID = cp.ServiceID THEN 0 ELSE 1 END
FROM    Transactions AS t
        INNER JOIN
        (   SELECT  CustomerID,
                    ServiceID,
                    dtCreated,
          )
            FROM    Transactions
            WHERE   transactiontype = 'Cust Purchase'
        ) AS cp
            ON cp.CustomerID = t.CustomerID
            AND cp.dtCreated < t.dtCreated
WHERE   t.dtcreated > @startdate 
AND     t.dtcreated < @enddate
AND     t.transactiontype = 'Cust Save'