У меня есть таблица с именем events
и выглядит так:
timestamp | intvalue | hostname | attributes
2019-03-13 14:43:05.437| 257 | room04 | Success 000
2019-03-13 14:43:05.317| 257 | room03 | Success 000
2019-03-13 14:43:03.450| 2049 | room05 | Error 108
2019-03-13 14:43:03.393| 0 | room05 | TicketNumber=3
2019-03-13 14:43:02.347| 0 | room04 | TicketNumber=2
2019-03-13 14:43:02.257| 0 | room03 | TicketNumber=1
Выше приведен пример таблицы, содержащей тысячи строк, подобных этой.
Я объясню в нескольких словах, что вы видите в этой таблице. Столбец timestamp
содержит дату и время, когда произошло каждое событие. В столбце intvalue
257
означает успешную запись, 2049
означает ошибку, а 0
означает, что заявка была сделана. hostname
дает имя считывателя карт / билетов, который читает каждый билет, а столбец attributes
дает некоторые подробности, такие как номер билета (1, 2, 3 и т. Д.) Или тип ошибки (т.е. 108 или 109 ) и если событие прошло успешно.
В этой ситуации есть шаблон, который говорит, что, если заявка запрашивает вход, и она действительна и произошла в то время, как 14:43:02.257
, то сообщение об успешной записи будет записано в базу данных (как новый событие) через 6 секунд не более (что означает максимум 14: 49: 02.257) после того, как билет был прочитан читателем.
Если билет не может быть введен, то через 100 мсек сообщение об ошибке будет записано в базу данных.
Итак, в этом примере я хочу создать таблицу, подобную приведенной ниже
timestamp | intvalue | hostname | result | ticketnumber
2019-03-13 14:43:05.437| 257 | room04 | Success 000 | TicketNumber=2
2019-03-13 14:43:05.317| 257 | room03 | Success 000 | TicketNumber=1
2019-03-13 14:43:03.450| 2049 | room05 | Error 108 | TicketNumber=3
Как вы можете видеть, билет с TicketNumber=3
сопоставляется с результатом Error 108
, потому что если вы посмотрите на исходную таблицу, у них будет запас времени менее 100 мс, остальные два билета будут сопоставлены 1-к-1 1 с их соответствующими результатами, потому что запас по времени составляет менее 6 секунд (и более 100 мс). Вы также можете заметить, что имена хостов могут помочь сопоставлению, строка с атрибутом TicketNumber=3
имеет hostname
из room05
, как и следующая строка с атрибутом Error 108
.
Я пытался самостоятельно присоединиться к этой таблице или присоединиться к ней с помощью CTE. Я использовал перекрестное применение, и я также попробовал методы, использующие datediff
, но я потерпел неудачу и застрял.
Есть ли кто-нибудь, кто может помочь мне и показать мне правильный путь достижения желаемого результата?
Большое спасибо за ваше время.