SQL Server 选择行

标签 sql sql-server

<分区>

如果我下面有这张表

   id         time
   start      08.00 AM 
   stop       09.00 AM
   stop       09.30 AM
   start      09.30 AM
   start      11.00 AM
   start      11.30 AM
   stop       11.40 AM
   stop       12.00 PM

我想要的输出只包含每个第一次开始每次停止后开始最近停止

有什么解决办法吗?

这就是我想要的输出方式:

   id         time
   start      08.00 AM 
   stop       09.00 AM
   start      09.30 AM
   stop       11.40 AM
   stop       12.00 PM

最佳答案

没有任何主键或每行有一些不同的 id ......我想到的唯一解决方案是这样的:

select rn, id , time
from
(select ROW_NUMBER() over (order by time) as rn, id, time from test 
where id = 'start'
union
select ROW_NUMBER() over (order by time) as rn, id, time from test 
where id = 'stop'
) d
order by rn

基本上我在开始行和停止行之间做了一个联合,如下所示:

 (select ROW_NUMBER() over (order by time) as rn, id, time from test 
    where id = 'start'
    union
    select ROW_NUMBER() over (order by time) as rn, id, time from test 
    where id = 'stop'
    ) d

返回:

    1   start   08.00
    2   start   11.00
    3   start   12.00
    4   start   13.00
    1   stop    09.00
    2   stop    10.00
    3   stop    14.00
    4   stop    15.00

来自原始输入:

id          time
start   08.00
stop    09.00
stop    10.00
start   11.00
start   12.00
start   13.00
stop    14.00
stop    15.00

现在你只需要按它们自己的行号来排序......就是那个 rn。

最后你会得到:

1   start   08.00
1   stop    09.00
2   start   11.00
2   stop    10.00
3   start   12.00
3   stop    14.00
4   start   13.00
4   stop    15.00

@注意:我的示例值与您的值接近...但是是虚构的...

关于SQL Server 选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14577406/

相关文章:

mysql - 为什么这个外键约束不正确?

sql - 如何使用selectExpr在spark数据帧中转换结构数组?

sql-server - 在 SQL Server 2012 中将 newid() 存储在数据类型为 UNIQUEIDENTIFIER 的列中有何优点?

sql - 在 IBM netezza SQL 表中查找多列的不同组合时出错

sql-server - 返回 SQL Server 数据库中以 varchar 作为参数的所有存储过程列表的查询

sql-server - 从 Powershell 调用的存储过程不通过 SMO 对象执行

sql - 学习 ANSI SQL 的最佳资源是什么?

SQL 多重内连接数据库

sql - 在 POSTGRESQL 中排名放置查询

mysql - 公司数据库中的客户和分支机构查询