我包含了一张图片,显示了我在 SQL 中尝试执行的操作。您在左侧看到的表是我在服务器上运行 SQL 查询得到的结果。我正在尝试使用 SQL/Python 创建右侧的表。我会使用主元,但当主元聚合值时,我必须取组件编号列的平均值、总和、最小值、最大值或其他值。实际上,我需要 2 个索引转置。可以对每个序列号进行多次测试。我需要使第一个测试按日期显示在第一个测试值列中,第二个、第三个或第四个测试也是如此。我需要每个序列号和每个组件的值显示在“测试 1”、“测试 2”、“测试 3”中。棘手的部分是,每个部件的测试 1、测试 2 和测试 3 都不同,但它们仍然需要按每个序列号的连续测试日期分组到存储桶中。
如果有人可以帮助我使用一些方法或帮助我为我想做的事情生成一些伪代码,我将不胜感激。谢谢。
以下是表格图像的链接: 左边是我的 SQL 查询提取的内容,右边是我想要的结果。
最佳答案
您可以使用row_number()
和条件聚合:
select
serial_number,
component_number
max(case when rn = 1 then test_value end) test1,
max(case when rn = 2 then test_value end) test2
from (
select
t.*,
row_number() over(partition by serial_number, component_number order by test_date) rn
from mytable t
) t
group by serial_number, component_number
在子查询中,row_number()
为共享相同 serial_number
和 component_number
的组内的每个记录分配排名。然后,外部查询按 serial_number
和 component_number
进行聚合,并根据其排名将 test_value
分散到各个列中。您可以使用更多条件 max()
扩展外部查询的 select
子句,以处理每个 (serial_number, component_number)
两个以上的测试元组。
关于python - 需要在按不匹配日期分组的 2 个索引上转置一些 SQL 值(SQL 和 Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976913/