sql查询,根据给定的时间范围选择组内的第一个匹配项

sql查询,根据给定的时间范围选择组内的第一个匹配项,sql,tsql,Sql,Tsql,可能重复: 使用MSSQL获得此结果: 从以下查询: SELECT [DATESTAMP],[ZONE],[ALARM] FROM [UNIT].[dbo].[LOG] WHERE [DATESTAMP] BETWEEN @StartDate AND @EndDate AND [ALARM] ='ERROR' AND [ZONE] IN ('BOX 11','BOX 12') ORDER BY DATESTAMP DESC 如何更改查询以仅获取第2、5、9、13、

可能重复:

使用MSSQL获得此结果:

从以下查询:

SELECT [DATESTAMP],[ZONE],[ALARM] 
FROM [UNIT].[dbo].[LOG] 
WHERE [DATESTAMP] BETWEEN @StartDate AND @EndDate 
    AND [ALARM] ='ERROR' 
    AND [ZONE] IN ('BOX 11','BOX 12') 
ORDER BY DATESTAMP DESC
如何更改查询以仅获取第2、5、9、13、17、19、20行

也就是说,我只需要一个组中大约1分钟的第一行(最早的一行), 然而,错误爆发的频率不会超过15分钟 当做
Freewheelin

如果我理解你的意思,你想知道每一分钟最早进入的时间,对吗?如果是,请尝试以下方法:

SELECT
    DateStamp,
    ZONE,
    Alarm
FROM
    [UNIT].[dbo].[LOG]  
    JOIN 
    (   SELECT 
            DateMinute = DATEADD(second, -DATEPART(second, DateStamp), DateStamp),
            Earliest = MIN(DateStamp)
        FROM
            [UNIT].[dbo].[LOG]  
        GROUP BY
            DATEADD(second, -DATEPART(second, DateStamp), DateStamp)
    ) X ON [UNIT].[dbo].[LOG].DateStamp = X.Earliest
结果是:

SELECT  MIN([DATESTAMP]) as FirstOccurance FROM ....
WHERE ....
....
GROUP BY DATEPART(minute, [DATESTAMP])
ORDER BY FirstOccurance DESC

-再次感谢各位

按时间分组您的结果。有按日期分组和使用min(date)Paul,好的,我在“组”中得到错误,其中组可以是1到4行,我对第一个错误发生感兴趣,因为大约一分钟内可能出现的错误是“以下错误”,并且由于概述原因无法再次识别。谢谢大家,这里反应真快!对,我认为我提供的代码就是这样做的——它在一分钟内显示了最早的错误。如果这不起作用,你能解释一下哪里缺少它吗?如果有效,请单击答案左侧的复选框,将其标记为可接受。Paul,好的,您的查询显示“YourTable”,意思是在筛选之前,将我的查询结果作为表,或按内容的视图剥离顺序,或表[LOG]。对不起,当我键入代码时,我忘了更改我的表名“YourTable”到您使用的“LOG”表的名称。我在回答中已经纠正了这一点。