表dbo.AllApps
记录所有已运行的可执行文件,它具有一个名为ApplicationHash
的列,该列存储exe的哈希值。
因此,如果exe已经运行了10次,表中将有10个条目具有相同的信息但时间戳不同。
我想生成一个报告,它只会返回10行中的1行(包括所有列时间,名称,desc ...)和一个额外的列,它们将提供执行exe的次数。
有什么建议吗?SQL - 仅返回匹配的第一行
`/* !!!!!DEFINE START AND END DATE FOR REPORT HERE!!!!!*/
DECLARE @StartDate DATETIME = 2017-01-01
DECLARE @EndDate DATETIME = 2017-01-02`
`/* Checks if the temp table #PCount exist and deletes the table if it does */
IF OBJECT_ID('tempdb..#PCount') IS NOT NULL
BEGIN
DROP TABLE #PCount
END`
`/* Performs a COUNT on the ApplicationHash entries */
SELECT ApplicationHash, COUNT(ApplicationHash) AS ProcessCount
INTO #PCount
FROM dbo.AllApps
WHERE
TokenType = 'Elevated'
AND ApplicationType != 'COM Class'
AND ApplicationType != 'ActiveX Control'
AND ProcessStartTime >= @StartDate
AND ProcessStartTime < @EndDAte
GROUP BY ApplicationHash`
`/* Pulls up the actual report and inserts the count value for the ApplicationHash */
SELECT #PCount.ProcessCount,
dbo.AllApps.ApplicationHash,
dbo.AllApps.ProcessStartTime,
dbo.AllApps.ApplicationType,
dbo.AllApps.Description,
dbo.AllApps.Publisher,
dbo.AllApps.ProductName,
dbo.AllApps.ProductVersion,
dbo.AllApps.EventDescription,
dbo.AllApps.CommandLine,
dbo.AllApps.FileName
FROM #PCount, dbo.AllApps
WHERE dbo.AllApps.ApplicationHash = #PCount.ApplicationHash
AND TokenType = 'Elevated'
AND ApplicationType != 'COM Class'
AND ApplicationType != 'ActiveX Control'
AND ProcessStartTime >= @StartDate
AND ProcessStartTime < @EndDate
ORDER BY ProcessStartTime DESC`
在sql server中,您只需以'TOP 1'作为字段列表的前缀来获取第一行。 – Hogan
而在10行中,您希望读取哪个时间,名称,desc等? – dotNET
@Hogan - 如果你只想要第一行,而不是所有'ApplicationHash'值的第一行,这才是真实的。 –