Суммарные значения между двумя транзакциями, соответствующие критериям поиска для нескольких записей - PullRequest
0 голосов
/ 01 мая 2020

У меня есть данные, хранящиеся в таблице, где производственные данные записываются с кодом «RUN» в столбце «TransactionID» и количеством в столбце «QtyDeclared» в событии смены инструмента qty. производится после суммирования последней смены инструмента и создания новой записи с кодом 'T C*'. Сегодня я заметил, что из-за ошибки в коде в некоторых случаях неправильно кол-во. был записан для смены инструмента.

Я хотел бы суммировать значения с TransactionID 'R%' между транзакциями 'T C*' и обновлять значения QtyDeclared для записей 'T C*'. Я действительно не знаю, с чего начать. Я думал об изменении значения в столбце «Действительный», чтобы указать измененные транзакции и перейти от верхней части таблицы к нижней. Я могу выбрать MAX (ID), где TransactionID похож на 'TC%', но как найти тот, который был перед последним, если смещение от этой транзакции неизвестно? Если бы я мог сделать это, я мог бы объявить две переменные и значения SUM между ними.

Я использую Microsoft SQL Server 2008 R2

Пример данных: Фрагмент извлечения данных


РЕДАКТИРОВАТЬ 1

Скрипт таблицы:

  USE [TEST_DBS]  --change to your database
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TransactionRecords](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [AssetNumber] [varchar](5) NOT NULL,
    [StartTime] [datetime] NOT NULL,
    [EndTime] [datetime] NOT NULL,
    [TransactionID] [varchar](7) NULL,
    [QtyDeclared] [int] NULL,
    [Valid] [varchar](3) NULL
) ON [PRIMARY]
GO

Скрипт INSER DATA:

  INSERT INTO [TEST_DBS].[dbo].[TransactionRecords] ([AssetNumber], [StartTime], [EndTime], [TransactionID], [QtyDeclared], [Valid])
  VALUES 
        (R0780, 30/04/2020 07:34, 30/04/2020 08:00, RUN, 2205, YES),
        (R0780, 30/04/2020 08:00, 30/04/2020 08:27, TC002, 2205, YES),
        (R0780, 30/04/2020 09:02, 30/04/2020 09:03, STOP, 0, YES),
        (R0780, 30/04/2020 09:03, 30/04/2020 09:54, RUN, 4372, YES),
        (R0780, 30/04/2020 09:54, 30/04/2020 09:59, TC003, 7434, YES),
        (R0780, 30/04/2020 09:59, 30/04/2020 10:08, RUN, 754, YES),
        (R0780, 30/04/2020 10:08, 30/04/2020 10:09, DT037, 0, YES),
        (R0780, 30/04/2020 10:09, 30/04/2020 10:24, RUN, 1312, YES),
        (R0780, 30/04/2020 10:24, 30/04/2020 10:26, DT038, 0, YES),
        (R0780, 30/04/2020 10:26, 30/04/2020 10:28, RUN, 143, YES),
        (R0780, 30/04/2020 10:28, 30/04/2020 11:15, DT007, 0, YES),
        (R0780, 30/04/2020 11:15, 30/04/2020 12:01, RUN, 3955, YES),
        (R0780, 30/04/2020 12:01, 30/04/2020 12:04, TC002, 6164, YES),
        (R0780, 30/04/2020 12:04, 30/04/2020 12:11, RUN, 656, YES),
        (R0780, 30/04/2020 12:11, 30/04/2020 12:13, DT038, 0, YES),
        (R0780, 30/04/2020 12:13, 30/04/2020 12:18, RUN, 405, YES),
        (R0780, 30/04/2020 12:18, 30/04/2020 12:18, STOP, 0, YES),
        (R0780, 30/04/2020 12:18, 30/04/2020 12:41, RUN, 1972, YES),
        (R0780, 30/04/2020 12:41, 30/04/2020 12:44, DT038, 0, YES),
        (R0780, 30/04/2020 12:44, 30/04/2020 12:52, RUN, 664, YES),
        (R0780, 30/04/2020 12:52, 30/04/2020 12:54, TC002, 1234, YES),
        (R0780, 30/04/2020 12:54, 30/04/2020 13:21, RUN, 2354, YES),
        (R0780, 30/04/2020 13:21, 30/04/2020 14:19, DT007, 0, YES),
        (R0780, 30/04/2020 14:19, 30/04/2020 14:42, RUN, 1851, YES),
        (R0780, 30/04/2020 14:42, 30/04/2020 14:43, TC002, 5678, YES),
        (R0780, 30/04/2020 14:43, 30/04/2020 15:06, RUN, 1831, YES),
        (R0780, 30/04/2020 15:06, 30/04/2020 15:06, STOP, 0, YES);

Ссылка на данные примера

...