如何通过降序将组中的行选择为2个特定值?

时间:2017-10-08 08:34:09

标签: sql sql-server

我想在特定字段中选择仅包含2个值的表的表。像例子波纹管。 我有一张桌子,每分钟通常有2个值。但有时候每分钟有超过2个值,我按降序选择。 避免这种情况,我希望分钟值[TimeStamp]的字段可以按2项降序排序,当超过2值时跳过。

SELECT TOP 10
dbo.ConRadVacuum.[TimeStamp],
dbo.ConRadVacuum.Tag,
dbo.ConRadVacuum.[Value]


FROM
ConRadVacuum
ORDER BY
[TimeStamp] DESC

我希望“选定的行”(32分钟)只能选择其他行的两个 image

2 个答案:

答案 0 :(得分:1)

我没有很好地回答您的问题,但我认为您可以将查询放入CTE并将ROW_Number添加到其中,然后选择您的行编号字段为1或2的cte

答案 1 :(得分:1)

我认为您可以通过对时间戳字段的分钟部分进行分区来使用row_number()函数,如下所示:

select *
from (
    select *, 
        row_number() over (
            partition by datepart(minute, cast([TimeStamp] as datetime)) 
                       --^^ I use `datepart()` over cast of your timestamp field 
                       --If your field is `datetime` you don't need to `cast`
            order by [TimeStamp] desc) seq
from t) tt
where seq <= 2;

SQL Fiddle Demo

相关问题