VARCHAR 的 OVER 子句
OVER clause for VARCHAR
我可以使用聚合函数对数字和日期列使用 over 子句。但是,我无法对 varchar 列使用 over 子句。在下面的示例中,我可以使用以下行重现 FIRST_FILL_DT 列:
MIN(FILL_DATE) OVER(PARTITION BY ID) AS FIRST_FILL_DT
但是,在尝试生成 FIRST_BP_MED 列时,我不确定是否可以使用类似的语法,因为我不知道聚合函数是否可以正确处理 VARCHAR 列。
任何人都可以就如何解决这个问题提供见解或指导吗?
我的数据是这样的:
我想要的数据应该是这样的:
如果你的数据库支持FIRST_VALUE window函数,你可以这样使用:
FIRST_VALUE(BP_MED) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS first_bp_med
FIRST_VALUE 的文档:
这很简单。在 window 子句上使用 'FIRST_VALUE' 来选择分区忽略的第一个值,而不管条件如何。
https://docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-ver15
SELECT
ID, FILL_DATE, BP_MED,
MIN (FILL_DATE) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS FIRST_FILL_DT,
FIRST_VALUE (BP_MED) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS FIRST_BP_MED
FROM
YOURTABLE;
我可以使用聚合函数对数字和日期列使用 over 子句。但是,我无法对 varchar 列使用 over 子句。在下面的示例中,我可以使用以下行重现 FIRST_FILL_DT 列:
MIN(FILL_DATE) OVER(PARTITION BY ID) AS FIRST_FILL_DT
但是,在尝试生成 FIRST_BP_MED 列时,我不确定是否可以使用类似的语法,因为我不知道聚合函数是否可以正确处理 VARCHAR 列。
任何人都可以就如何解决这个问题提供见解或指导吗?
我的数据是这样的:
我想要的数据应该是这样的:
如果你的数据库支持FIRST_VALUE window函数,你可以这样使用:
FIRST_VALUE(BP_MED) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS first_bp_med
FIRST_VALUE 的文档:
这很简单。在 window 子句上使用 'FIRST_VALUE' 来选择分区忽略的第一个值,而不管条件如何。
https://docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-ver15
SELECT
ID, FILL_DATE, BP_MED,
MIN (FILL_DATE) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS FIRST_FILL_DT,
FIRST_VALUE (BP_MED) OVER (PARTITION BY ID ORDER BY FILL_DATE) AS FIRST_BP_MED
FROM
YOURTABLE;