合并 sql 中的两行并创建新列

Merge two rows in sql and create new columns

我的输入数据(table中的数据是):

我有这个要求,我需要找到第一个和最后一个条目以及第一个输入和最后一个 entered/modified。 当我有这样的查询时(不是精确的查询——这个查询是一团糟,为了 PoC,我正在简化):

Select field1, field2, min(EnteredDate), max(EnteredDate) from table where field = <fieldvalue> group by field1 AND EnteredBy

不要问我为什么要按“EnteredBy”分组,这是我处理的烂摊子,是前团队干的。

现在的结果是这样的

实际上查询的输出应该如下所示:

有人可以指导我如何实现这一目标吗?谢谢!

文本格式的预期输出:

Field1  Field2  First entered by    First entered date  Last entered By Last Entered Date
1   hello   User1   3/9/2022    User2   3/11/2022
2   somenew User2   3/10/2022   User1   3/11/2022

要获取具有某些指定顺序的第一行/最后一行的值,请使用 window functions first_value / last_value

必须明确指定 window 框架子句才能使 LAST_VALUE 正常工作,因为默认框架是 RANGE UNBOUNDED PRECEDING AND CURRENT ROW,它始终为 LAST_VALUE 生成当前行。

DISTINCT 删除以下查询中的所有重复行,并且 returns 对于 field1, field2

的每个组合仅删除 1 行
SELECT DISTINCT
  field1
, field2
, FIRST_VALUE(entered_by) OVER w first_entered_by
, FIRST_VALUE(entered_date) OVER w first_entered_date
, LAST_VALUE(entered_by) OVER w last_entered_by
, LAST_VALUE(entered_date) OVER w last_entered_date
FROM mytable
WINDOW w AS (
  PARTITION by field1, field2
  ORDER BY entered_date
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
ORDER BY field1

Here's a DB Fiddle illustrating how to do it with sample data & set up code