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.dtCreated
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'
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'