Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL是否从同一表中的另一行获取信息?_Sql_Tsql_Parsing_Logging_Filezilla - Fatal编程技术网

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

TSQL是否从同一表中的另一行获取信息?,sql,tsql,parsing,logging,filezilla,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 Ad

我正在构建一个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成功或失败


谢谢

假设您已将这些行解析为实际的列,并且使用SQL server 2005或更高版本。您可以使用下面未测试的交叉应用示例查询。我希望这有帮助

select o.*, prev.*
from FTPLog o
cross apply 
 (
   select top 1 *
   from FTPLog P where P.LogDate < O.LogDate 
   order by LogDate DESC
 ) prev

假设您已经将这些行解析为实际的列,并且您有SQL server 2005或更高版本。您可以使用下面未测试的交叉应用示例查询。我希望这有帮助

select o.*, prev.*
from FTPLog o
cross apply 
 (
   select top 1 *
   from FTPLog P where P.LogDate < O.LogDate 
   order by LogDate DESC
 ) prev

James的想法是正确的,尽管如果您有完全相同的日志日期,并且从您的示例来看,可能会出现一些问题。您可以在插入数据时添加标识列以强制执行订单,然后可以在标识列上使用James的概念


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

< P>杰姆斯有正确的想法,但是如果您的日志日期完全相同,并且从您的示例中看,您可能会遇到一些问题。您可以在插入数据时添加标识列以强制执行订单,然后可以在标识列上使用James的概念


但更重要的是,TSQL可能不是这个项目的最佳选择,至少它本身不是。虽然有一些技术可以让它按顺序进行迭代,但这并不像某些其他语言那样好。您可能需要考虑在Python或Perl或C等工具中解析文件,这在文本处理方面更好,并且更好地在顺序处理数据。

不确定是否有更好的方法来完成它,但可能插入日志行号,然后从当前解析返回,以确保所有相关信息匹配,检查该组中的第一个STOR?是否将其作为一个大字符串放入表中?最初,我将每行作为一个字符串导入表中。之后,我将发布我需要的有用信息。您是否在每行存储某种ID?SQL本身并不知道行的顺序,而且时间戳的粒度也不足以指示它们的实际顺序。因此,您需要明确定义消息序列的内容。不确定是否有更好的方法,但可以插入日志行号,然后从当前解析返回以确保所有相关信息匹配,并检查该组中的第一个STOR?是否将其作为一个大字符串放入表中?最初,我正在将每一行作为字符串导入表中。之后,我将发布我需要的有用信息。您是否在每行存储某种ID?SQL本身并不知道行的顺序,而且时间戳的粒度也不足以指示它们的实际顺序。因此,您需要明确定义消息序列的内容。