sql - 如何将 2 行(即进入和退出日期)变成 1 行

标签 sql oracle rows

假设我有一个这样的表:

<表类=“s-表”> <标题> 人物 入口 退出 <正文> 一个 2022年8月9日 一个 2022 年 8 月 10 日 一个 2022 年 8 月 10 日 一个 2022 年 8 月 13 日 两个 2022年8月8日 两个 2022 年 8 月 12 日

我希望最终得到如下 3 行:

<表类=“s-表”> <标题> 人物 入口 退出 <正文> 一个 2022年8月9日 2022 年 8 月 10 日 一个 2022 年 8 月 10 日 2022 年 8 月 13 日 两个 2022年8月8日 2022 年 8 月 12 日

我想我可以用滞后函数来做到这一点。但这样做的正确方法是什么?提前致谢。

最佳答案

假设每个入学日期都有一个退出日期,您可以尝试以下操作:

Select D.Person,MAX(Entrance) Entrance, MAX(Exit) Exit
From
(
  Select table_name.*,
         MOD(ROW_NUMBER() Over (Partition By Person Order By Entrance, Exit), 
         COUNT(*) Over (Partition By Person)/2) grp
  From table_name
) D
Group By D.Person, D.grp

查看demo .

关于sql - 如何将 2 行(即进入和退出日期)变成 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73583264/

相关文章:

mysql - 从连接表中仅选择具有 MAX(date) 的行中的所有列

sql - LIKE '%...%' 通配符查询的 PL/SQL 性能调优

python - 从 python 脚本使用游标输出参数调用 oracle 存储过程

r - 如果小于行标准差,则将行值更改为零

sql - 如何替换SQL中的多个字符?

cfquery INSERT INTO 中的 cflooping 时出现 sql 语法错误

mysql - SQL 从 2 个不同的表创建变量

mysql - 如何使用 SQL 有选择地从包含多个值(每个值均以逗号分隔)的列中删除特定值?

r - 合并R中的半重复行

c - 尝试在 C 程序中生成行时出现问题