我有以下表格样本
CREATE TABLE [dbo].[Transactions](
[TransactionID] [int] IDENTITY(1,1) NOT NULL,
[TransactionTypeID] [int] NOT NULL,
[Counter] [int] NOT NULL,
[GivenCounter] [int] NOT NULL,
[ExecutionDate] [datetime] NOT NULL,
CONSTRAINT [PK_Transactions] PRIMARY KEY CLUSTERED ([TransactionID] ASC)
TransactionTypeID
字段标识交易类型:
特别是type 3
指的是取消之前的交易。因此,如果在取消之前执行的交易(就ExecutionDate而言)是type 2
意味着取消消费而前一交易是type 1
意味着取消是活化。
如何仅查询意义为停用的交易(type 3
与之前的type 1
)?
有人可以帮忙吗?
编辑:添加了一些示例数据以便更好地解释
TransactionID TransactionTypeID Counter GivenCounter ExecutionDate
-------------- ----------------- ------- ------------ -----------------------
138327 1 1 0 2014-07-20 07:14:08.000
134175 2 0 1 2014-07-21 12:39:12.000
137620 3 1 1 2014-07-22 20:19:06.000
134199 1 1 0 2014-07-23 10:09:52.000
132772 3 0 1 2014-07-24 08:18:23.000
在此示例中,我的查询应仅提取一条记录(TransactionID
132772),因为它取消了TransactionTypeID
等于1的先前交易
答案 0 :(得分:1)
我会做这样的事情:
SELECT a.transactionid
FROM (SELECT *, Row_number() OVER(ORDER BY ExecutionDate) AS Rownumber
FROM transactions) a
JOIN (SELECT transactiontypeid, Row_number() OVER( ORDER BY ExecutionDate) AS Rownumber
FROM transactions) b
ON a.rownumber = b.rownumber + 1
WHERE a.transactiontypeid = 1
AND b.transactiontypeid = 3
答案 1 :(得分:-1)
我已经更新了我的答案,你能试试吗?
SELECT *
FROM
(
SELECT
DENSE_RANK() OVER (PARTITION BY (TransactionTypeID) ORDER BY (ExecutionDate)) AS 'RowNo',
TransactionID, TransactionTypeID, ExecutionDate
FROM dbo.Transactions2
WHERE TransactionTypeID = 3
) AS A
WHERE RowNo = 2;