Динамическое обновление столбцов новыми данными - PullRequest
0 голосов
/ 05 июня 2019

Я работаю с таблицей SQL с более чем 10K + значениями, по сути, она контролирует обновление статуса рабочей станции в течение дня. В настоящее время сервер SQL будет сообщать о новом сообщении с текущей отметкой времени, поэтому новая запись может быть сгенерирована для одной и той же части сотни раз в день, при этом изменяются только столбцы «Production_Status» и «TimeStamp». Я хочу создать новую таблицу, в которой выбираются уникальные имена деталей, а затем есть два других столбца, которые управляют выводом последней записи для этой части.

В настоящее время я выбрал данные - переупорядочил их, чтобы последняя метка времени была первой в списке. В настоящее время я пытаюсь сделать эту динамическую таблицу, но я новичок в SQL.

select dateTimeStamp,partNumber,lineStatus 
from tblPLCData 
where lineStatus like '_ Zone %' or lineStatus = 'Production'
order by dateTimeStamp desc;

Ожидаемые результаты должны быть NewTable с количеством строк, основанным на количестве деталей в нашем общем производственном объекте - этот столбец будет статическим - затем два других столбца, которые будут проверять Originaltable на наличие последнего статуса и метки времени, и обновлять два других столбца в новой таблице.

Мне не нужна помощь в создании таблицы, но больше логика, которая окружает обновление строк на основе другой таблицы.

Очень ценится.

1 Ответ

0 голосов
/ 06 июня 2019

Похоже, что вы могли бы воспользоваться дополнительным соединением, которое находит MAX statusDate для каждого partNumber, а затем присоединяется к себе, чтобы вы могли получить соответствующее значение lineStatus, соответствующее записи с максимальной датой. Я просто заставляю вас вставлять / обновлять временную таблицу, но это может быть общим подходом, который вы можете использовать.

-- New table that might already exist in your db, I am creating one here
declare @NewTable(
    partNumber int,
    lineStatus varchar(max),
    last_update datetime
)

-- To initially set up your table or to update your table later with new part numbers that were not added before
insert into @NewTable
select tpd.partNumber, tpd.lineStatus, tpd.lineStatusdate
from tblPLCData tpd
join (
    select partNumber, MAX(lineStatusdate) lineStatusDateMax
    from tblPLCData
    group by partNumber
) maxStatusDate on tpd.partNumber = maxStatusDate.partNumber
    and tpd.lineStatusdate = maxStatusDate.lineStatusDateMax
left join @NewTable nt on tbd.partNumber = nt.partNumber
where tpd.lineStatus like '_ Zone %' or tpd.lineStatus = 'Production' and nt.partNumber is null

-- To update your table whenever you deem it necessary to refresh it.  I try to avoid triggers in my dbs
update nt set nt.lineStatus = tpd.lineStatus, nt.lineStatusdate = tpd.lineStatusDate
from tblPLCData tpd
join (
    select partNumber, MAX(lineStatusdate) lineStatusDateMax
    from tblPLCData
    group by partNumber
) maxStatusDate on tpd.partNumber = maxStatusDate.partNumber
    and tpd.lineStatusdate = maxStatusDate.lineStatusDateMax
join @NewTable nt on tbd.partNumber = nt.partNumber
where tpd.lineStatus like '_ Zone %' or tpd.lineStatus = 'Production'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...