sql 如何在查询时移除某一行数据以及这一行的上一行数据

oracel 有个rownum 函数, 它可以为 某一行 数据增加一个序列比如查出的序列值便是

[
{"name": "法外狂徒-张三",option":"申请团长", rownum:1},
{"name": "法外狂徒-张三","option":"申请人撤销", rownum:2},
{"name": "法外狂徒-张三","option":"申请旅长", rownum:3},
{"name": "法外狂徒-张三","option":"司令通过", rownum:4},
{"name": "法外狂徒-张三","option":"申请师长", rownum:5},
{"name": "法外狂徒-张三","option":"申请人撤销", rownum:6},
{"name": "法外狂徒-张三","option":"申请军长", rownum:7},
{"name": "法外狂徒-张三","option":"司令通过", rownum:8},
]

以上是表内的结果集,由于申请人撤销了操作,所以它之前的操作是无效的, 在页面也不显示, 申请人撤销这个字段是固定的,它之前的操作不固定, 所以如果想要过滤掉它之前的数据,我们需要先过去到申请人撤销那条数据的下标,再去-1.

想法, 我们可以先查询上面的结果集, 并且通过rownum为每个结果集定义一个固定的序号, 查询结果集select * from 结果集 where rownum not in ((select rownum from (结果集) where option = "申请人撤销" unine all select rownum -1 from (结果集) where option = "申请人撤销"))
这样我们就得到如下结果

[

{"name": "法外狂徒-张三","option":"申请旅长", rownum:3},
{"name": "法外狂徒-张三","option":"司令通过", rownum:4},
{"name": "法外狂徒-张三","option":"申请军长", rownum:7},
{"name": "法外狂徒-张三","option":"司令通过", rownum:8},
]

由于结果集被反复使用到,我们在mybatis中可以将结果集sql 提出到sql片段中,便于反复调用

Mybaits.xml

<sql id= "dataSource">
  select t*,rownum as id from 表名 where t.name=#{name} order by operTime
</sql>

<sql id="removeRowIndex">
	select id from (<include refid="dataSource"/>) where option="申请人撤销"
	union all 
	select id-1 from (<include refid="dataSource"/>) where option="申请人撤销"
</sql>

<select id="getFolw" resultMap="java.util.HashMap" parameterType="java.util.HashMap">
  select * from(<include refid="dataSource"/>) q
  where q.id not in (
    (<include refid="removeRowIndex"/>)
    )
</select>
在Qt中,如果你想从数据库查询特定信息并在TableView中只展示一行数据,你可以按照以下步骤操作: 1. **设置连接到数据库**: 首先,你需要连接到你的数据库,通常使用QSqlDatabase或 QSqlQueryModel。例如: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("你的数据库驱动"); db.setHostName("localhost"); db.setDatabaseName("your_database_name"); db.setUserName("your_username"); db.setPassword("your_password"); if (!db.open()) { qDebug() << "无法打开数据库: " << db.lastError().text(); } ``` 2. **编写查询语句**: 编写SQL查询,指定你想获的那一行数据。假设你要找的是某个特定ID的数据: ```cpp QSqlQuery query(db); query.prepare("SELECT * FROM your_table WHERE id = :id"); query.bindValue(":id", yourDesiredId); if (!query.exec()) { qDebug() << "查询失败: " << query.lastError().text(); } ``` 3. **填充数据模型**: 使用`QSqlQueryModel`来存储查询结果,并将它绑定到TableView上: ```cpp QSqlQueryModel model(&db); modelsetQuery(query); QTableView tableView; tableView.setModel(&model); ``` 4. **限制显示行数**: 如果只想显示一行,可以在`model()`方法返回之前,移除所有行除了最后一行: ```cpp int numRows = model.rowCount(); model.removeRows(0, numRows - 1); // 只保留最后一行 ``` 5. **显示查询结果**: 最后,刷新TableView来显示数据: ```cpp tableView.resizeColumnsToContents(); // 自动调整列宽 tableView.show(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值