Ребята У меня есть две таблицы с именем 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 |
+------------------------+-----------------+---------------+-----------------+
Есть другие столбцы, а в этих таблицах, однако для моего запроса они не имеют никакого отношения, таким образом, они не являются включен.
Теперь то, что я хочу сделать, это получить последнюю версию (на основе RequisitionDate
) ApprovedCount
на каждый RequisitionCode
из RequisitionHistory
, а затем вычесть его из ApprovedCount
второй последней записи одних и тех же RequisitionCode
(может быть один или несколько записей, которые 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 таблицы истории. –
Вы имеете в виду «WHERE RequisitionHistoryCode NOT IN ....» ??? Я попробовал, но тот же результат. – NewbieProgrammer