伙计们我有两个表名为Requisition
和RequisitionHistory
。表Requisition
是其中具有基于RequisitionCode
(PK)的唯一条目的主要表格,但是在表RequisitionHistory
中存在基于RequisitionCode
的多行,因为每次在Requisition
表上执行任何动作(例如更新等)时,新的条目插入RequisitionHistory
。如何从同一个表中的另一行中减去一行?
这是我Requisiton
表
+-----------------+---------------+--------------------+
| RequisitionCode | ApprovedCount | RequisitionDate |
+-----------------+---------------+--------------------+
| 1 | 10 | 02/01/2014 |
| 2 | 23 | 01/01/2014 |
| 3 | 3 | 02/01/2014 |
+-----------------+---------------+--------------------+
这是我RequisitionHistory
表
+------------------------+-----------------+---------------+-----------------+
| RequisitionHistoryCode | RequisitionCode | ApprovedCount | RequisitionDate |
+------------------------+-----------------+---------------+-----------------+
| 1 | 1 | 14 | 01/01/2014 |
| 2 | 1 | 10 | 02/01/2014 |
| 3 | 2 | 23 | 01/01/2014 |
| 4 | 3 | 1 | 01/01/2014 |
| 5 | 3 | 3 | 02/01/2014 |
+------------------------+-----------------+---------------+-----------------+
还有其他列,以及在这些表中,但我查询他们无关因而他们不包括在内。
现在我想要做的就是从RequisitionHistory
得到每各RequisitionCode
最新(基于RequisitionDate
)ApprovedCount
,然后从同一RequisitionCode
(可能有单个或多个的那项的倒数第二项的ApprovedCount
减去它RequisitionCode
在RequisitionHistory
)
我试图这样做(但惨败)
select RequisitionCode ,
(ISNULL((select top 1 ApprovedCount from RequisitionHistory
where RequisitionCode =r.RequisitionCode order by RequisitionDate desc),0)
-
ISNULL(
(select top 1 ApprovedCount from RequisitionHistory where RequisitionCode
NOT IN
(select top 1 ApprovedCount from RequisitionHistory
where RequisitionCode =r.RequisitionCode order by RequisitionDate desc)
and RequisitionCode = r.RequisitionCode order by RequisitionDate DESC),0))
as StructureChange from Requisition r
我在做什么错?
您的“NOT IN”应该使用RequisitionHistoryCode,因为那是历史记录表的PK。 – 2014-09-02 13:06:04
你的意思是“Where RequisitionHistoryCode NOT IN ....”?我尝试过,但结果相同。 – NewbieProgrammer 2014-09-02 13:14:57