我正在构建一个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成功或不成功。
谢谢!
答案 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#等工具解析文件,这样可以更好地处理文本并更好地按顺序处理数据。