【发布时间】:2014-08-20 13:13:11
【问题描述】:
我有下表示例
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 字段标识交易类型:
- 1 表示激活
- 2 表示消耗
- 3 表示取消
特别是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
【问题讨论】:
-
你怎么知道
132772是131199的取消?肯定有某个专栏将这两者联系在一起吗? -
没有。没有任何列将记录联系在一起。
TransactionTypeID = 3的记录在执行日期方面与前一条记录相关。
标签: sql sql-server sql-server-2008-r2 common-table-expression recursive-query