Sql 选择最后一组连续行中的第一行
如何选择在连续行的最后一个“分组”中第一次出现的行,其中分组由以下示例状态中特定列值的连续外观定义 例如,给定下表: 身份证件 日期时间 状态 所需的价值 1. 2021-04-01 09:42:41.319000 残缺的 A. 2. 2021-04-04 09:42:41.319000 完成 B 3. 2021-04-05 09:42:41.319000 残缺的 C 4. 2021-04-05 10:42:41.319000 残缺的 C 5. 2021-04-07 09:42:41.319000 完成 D 6. 2021-04-012 09:42:41.319000 完成 E 假设所有列都不为空 小提琴 “不存在”仅适用于最后一组对等方。没有其他状态的后续行。Sql 选择最后一组连续行中的第一行,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,如何选择在连续行的最后一个“分组”中第一次出现的行,其中分组由以下示例状态中特定列值的连续外观定义 例如,给定下表: 身份证件 日期时间 状态 所需的价值 1. 2021-04-01 09:42:41.319000 残缺的 A. 2. 2021-04-04 09:42:41.319000 完成 B 3. 2021-04-05 09:42:41.319000 残缺的 C 4. 2021-04-05 10:42:41.319000 残缺的 C 5. 2021-04-07 09:42:41.31900
按日期时间订购,然后取第一个。瞧。这里有一个窗口函数解决方案,它只访问您的表一次,对于大型数据集,它的性能可能会更好,也可能不会更好: 挑选* 从…起 选择*, 按日期时间描述的订单提前期状态 不同于作为组中第一个组的状态 来自tbl T _组中的第一个_在哪里 按日期时间顺序描述 限制1 A基于。为了举例说明,以下是每行的_组中第一个_的值: id datetime状态值\u需要\u组中的第一个\u ----------------------------------- 6 2021-04-12 09:42:41.319完成E-f 5 2021-04-07 09:42:41.319完成 4 2021-04-05 10:42:41.319不完全C f 3 2021-04-05 09:42:41.319不完全C t 2021-04-04 09:42:41.319完成 1 2021-04-01 09:42:41.319不完整的A t
SELECT *
FROM tbl t1
WHERE NOT EXISTS (
SELECT FROM tbl t2
WHERE t2.state <> t1.state
AND t2.datetime > t1.datetime
)
ORDER BY datetime
LIMIT 1;