Sql server 基于3个条件返回一行或一个字段的SQL查询
我正在从事一个项目,当SQL Server数据库中出现某个日志消息时,我试图通过电子邮件发送SQL查询的结果 我的第一个目标是隔离我需要的数据。有关表格如下:Sql server 基于3个条件返回一行或一个字段的SQL查询,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在从事一个项目,当SQL Server数据库中出现某个日志消息时,我试图通过电子邮件发送SQL查询的结果 我的第一个目标是隔离我需要的数据。有关表格如下: System | Time | Log | Index 1001 |7/16/2015 7:22 |Fail |1729943 1002 |7/17/2015 10:26|Success |1743789 1002 |7/18/2015 10:26|Success |1743799
System | Time | Log | Index
1001 |7/16/2015 7:22 |Fail |1729943
1002 |7/17/2015 10:26|Success |1743789
1002 |7/18/2015 10:26|Success |1743799
1003 |7/22/2015 6:14 |Timeout |1771793
我特别感兴趣的是系统1002在日志中生成成功时的最后一次时间。似乎很简单,但系统
和日志
不是唯一的记录,以下是:
SELECT *
FROM DB.LogFiles
WHERE System ='1002' and Log ='Success'
返回2行:
System | Time | Log | Index
1002 | 7/17/2015 09:43 | Success | 1743789
1002 | 7/18/2015 10:26 | Success | 1743799
我只对最后一行时间感兴趣
发生这种情况,因此最后一行:
1002 | 7/18/2015 10:26 | Success | 1743799
这个过程每天都会重复,所以第二天我会看到以下记录:
System | Time | Log | Index
1002 | 7/17/2015 09:43 | Success | 1743789
1002 | 7/18/2015 10:26 | Success | 1743799
1002 | 7/9/2015 11:42 | Success | 1748752
我只想再次收到新记录和上次记录的通知
1002 | 7/9/2015 11:42 | Success | 1749261
该项目的最终目标是安排查询每隔几个小时运行一次,并查看是否输入了新的“成功”记录。如果有,则生成一封电子邮件。但是,我不确定这部分是否可以用SQL来完成,我可能需要看一些其他的东西来实现这一点。对SQL部分的任何帮助或见解都将非常有用 如果我正确理解索引是唯一的,并且值越高记录越新,那么您可以这样做
WITH X AS
(
SELECT [System]
,[Time]
,[Log]
,[Index]
,ROW_NUMBER() OVER (PARTITION BY [System]
ORDER BY CAST([Time] AS DATETIME) DESC) rn
FROM TableName
)
SELECT [System]
,[Time]
,[Log]
,[Index]
FROM X
WHERE rn = 1
SELECT a.system, a.time, a.log, a.index
FROM log_files a
WHERE a.System ='1002' and a.Log ='Success'
AND a.index = (SELECT MAX(z.index) FROM log_files z
WHERE z.System = a.System and z.Log = a.Log)
将新字段(标志)添加到日志表中,默认值为FALSE。无论何时发送有关记录的电子邮件,请将标志字段设置为TRUE/
每次您想要发送电子邮件时,只需检查具有最高日期的记录,并且仅在标志字段为False时发送电子邮件。如果标志字段为TRUE,则忽略它。您熟悉TOP 1和ORDER BY吗?