首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

打开枚举似乎并不涵盖所有的情况

你提到的情况可能涉及更复杂的逻辑,特别是当你需要处理更复杂的分组和排序逻辑时。为了更全面地解决这个问题,我们可以进一步细化查询,以确保涵盖所有可能的情况。

假设你有一个包含以下列的表 my_table

  • id: 唯一标识符
  • group_id: 分组标识符
  • value: 需要处理的值
  • timestamp: 时间戳,用于确定顺序

你希望根据 group_id 分组,并选择每个组的上一个组的最后一个值。以下是一个更详细的示例,展示如何使用窗口函数和子查询来实现这一点。

示例数据

假设你的表 my_table 包含以下数据:

id

group_id

value

timestamp

1

A

10

2023-01-01 10:00:00

2

A

20

2023-01-01 11:00:00

3

B

30

2023-01-01 12:00:00

4

B

40

2023-01-01 13:00:00

5

C

50

2023-01-01 14:00:00

6

C

60

2023-01-01 15:00:00

查询示例

你希望根据 group_id 分组,并选择每个组的上一个组的最后一个值。你可以使用窗口函数和子查询来实现这一点。

代码语言:javascript
复制
WITH ranked_table AS (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY timestamp DESC) AS rn
  FROM
    my_table
),
last_values AS (
  SELECT
    group_id,
    value AS last_value,
    ROW_NUMBER() OVER (ORDER BY group_id) AS group_rank
  FROM
    ranked_table
  WHERE
    rn = 1
)
SELECT
  t.id,
  t.group_id,
  t.value,
  t.timestamp,
  lv.last_value AS current_group_last_value,
  LAG(lv.last_value) OVER (ORDER BY lv.group_rank) AS previous_group_last_value
FROM
  my_table t
JOIN
  last_values lv
ON
  t.group_id = lv.group_id
ORDER BY
  t.timestamp;

解释

  1. ranked_table: 使用 ROW_NUMBER() 窗口函数为每个 group_id 分组的数据按 timestamp 降序排列,并为每一行分配一个行号 rn
  2. last_values: 从 ranked_table 中选择每个 group_id 的最后一个值(即 rn = 1 的行),并为每个组分配一个 group_rank
  3. 主查询:
    • 将原始表 my_tablelast_values 进行连接,以便每行都包含其组的最后一个值。
    • 使用 LAG 窗口函数根据 group_rank 的顺序获取上一个组的最后一个值。

结果

查询结果将包含每行的 idgroup_idvaluetimestamp 以及上一个组的最后一个值 previous_group_last_value

id

group_id

value

timestamp

current_group_last_value

previous_group_last_value

1

A

10

2023-01-01 10:00:00

20

NULL

2

A

20

2023-01-01 11:00:00

20

NULL

3

B

30

2023-01-01 12:00:00

40

20

4

B

40

2023-01-01 13:00:00

40

20

5

C

50

2023-01-01 14:00:00

60

40

6

C

60

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Effective Java Second Edition中文版已出版 博客分类: Java 出版JavaHibernate金山编程

    Java从诞生到日趋完善,经过了不断的发展壮大,目前全世界拥有了成千上万的Java开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码,是大家所追求的目标之一。作为经典Jolt获奖作品的新版书,它已经进行了彻底的更新,涵盖了自第1版之后所引入的Java SE 5和Java SE 6的新特性。作者探索了新的设计模式和语言习惯用法,介绍了如何充分利用从泛型到枚举、从注解到自动装箱的各种特性。本书的作者Joshua Bloch曾经是Sun公司的杰出工程师,带领团队设计和实现过无数的Java平台特性,包括JDK 5.0语言增强版和获奖的Java Collections Framework。他也是Jolt奖的获得者,现在担任Google公司的首席Java架构师。他为我们带来了共78条程序员必备的经验法则:针对你每天都会遇到的编程问题提出了最有效、最实用的解决方案。

    04

    Qt编写控件属性设计器10-导出xml

    能够导出控件布局和属性设置数据到xml文件或者其他文件,也是一个非常实用的功能,类似于QtDesigner中把页面设计好以后生成的.ui结尾的文件,其实就是xml文件,按照约定的规则存储好控件名称和属性名称及对应的属性值,然后打开的时候按照这个规则取出来就行了。每个控件还有固定的几个数据需要存储,比如XY轴和对应的宽度高度,然后在xml数据文件的最开始还可以存储整个画布的宽度高度以便其他用途。导出到xml格式,是为了方便解析,毕竟xml数据格式的解析,各种语言平台都有,而且都是非常成熟快速的。其实还可以考虑存储到数据库,这样就更加强大了,能够存储的东西更多,可以干的事情更多。

    00
    领券