TSQL Получение информации из другой строки в той же таблице? - PullRequest
0 голосов
/ 12 августа 2011

Я создаю запрос TSQL для анализа журнала FTP из FileZilla. Я пытаюсь выяснить, есть ли способ получить информацию из строки, предшествующей текущей?

Например, Я проанализировал следующую процедуру: "STOR file.exe"

При использовании FileZilla не говорится, был ли STOR успешным до следующей строки. Поэтому я хочу проверить следующую строку и посмотреть, был ли STOR успешным или неудачным?

Также люди могут пытаться хранить файлы несколько раз, поэтому я хочу получить последнюю версию его статуса.

Пример информации из файла журнала:

   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> STOR file.exe
   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> 150 Opening data for transfer.
   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> 226 Transfer OK

Я хочу добавить в свой запрос столбец, в котором говорится, что STOR был успешным или неудачным.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Предполагая, что вы разбили эти строки на фактические столбцы, и у вас есть SQL Server 2005 или выше. Вы можете использовать CROSS APPLY пример запроса ниже (не проверено). Надеюсь, это поможет.

select o.*, prev.*
from FTPLog o
cross apply 
 (
   select top 1 *
   from FTPLog P where P.LogDate < O.LogDate 
   order by LogDate DESC
 ) prev
1 голос
/ 12 августа 2011

У Джеймса правильная идея, хотя могут возникнуть некоторые проблемы, если у вас когда-нибудь будут одинаковые даты журналов (а из вашего примера это выглядит так, как будто вы могли бы).Возможно, вы сможете добавить столбец идентификаторов, чтобы принудительно упорядочить заказ во время вставки данных, тогда вы можете использовать концепцию Джеймса для столбца идентификаторов.

Более того, TSQL может быть не лучшимВыбор для этого проекта, по крайней мере, не сам по себе.Хотя существуют методы, которые можно использовать для последовательной итерации, это не так хорошо для этого, как в некоторых других языках.Возможно, вы захотите проанализировать ваши файлы с помощью такого инструмента, как Python или Perl или даже C #, который лучше обрабатывает текст и лучше обрабатывает данные последовательно.

...