TSQL从同一表中的另一行获取信息?

时间:2011-08-12 16:17:07

标签: sql tsql parsing logging filezilla

我正在构建一个TSQL查询来解析来自FileZilla的FTP日志。我想弄清楚是否有办法从当前一行之前的一行获取信息?

例如, 我已经解析了以下过程:“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 个答案:

答案 0 :(得分:2)

假设您已将这些行解析为实际列,并且您具有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 :(得分:1)

詹姆斯有正确的想法,但如果您的日志日期完全相同,可能会出现一些问题(从您的样本看起来可能与您相似)。您可以添加标识列以在插入数据时强制执行订单,然后您可以在标识列上使用James的概念。

不仅如此,TSQL可能不是这个项目的最佳选择,至少不是它本身。虽然有一些技术可以用来使它按顺序迭代,但它并不像某些其他语言那样好。您可能需要考虑使用Python或Perl甚至C#等工具解析文件,这样可以更好地处理文本并更好地按顺序处理数据。