【发布时间】:2025-12-24 05:45:06
【问题描述】:
我正在使用 PARTITION BY 子句对结果进行排序。此问题Sql Order by on multiple column 中提到了使用 PARTITION BY 的详细信息。当我在 Oracle 中运行时,它工作正常。我将 H2 db 用于我的单元测试用例。当我在 H2 db 上运行相同的查询时,它不起作用。是 H2 中的已知问题吗?是否有任何替代解决方案可以同时在 Oracle 和 H2 中运行。
【问题讨论】:
我正在使用 PARTITION BY 子句对结果进行排序。此问题Sql Order by on multiple column 中提到了使用 PARTITION BY 的详细信息。当我在 Oracle 中运行时,它工作正常。我将 H2 db 用于我的单元测试用例。当我在 H2 db 上运行相同的查询时,它不起作用。是 H2 中的已知问题吗?是否有任何替代解决方案可以同时在 Oracle 和 H2 中运行。
【问题讨论】:
我认为 H2 不支持窗口函数(也称为分析函数)。但是,您可以使用标准 SQL 在链接中进行查询:
SELECT t.*
FROM yourtable t join
(select vendorname, max(incidentdate) as maxdate
from yourtable yt
group by vendorname
) vn
on vn.vendorname = yt.vendorname
ORDER BY vn.maxDate DESC, t.VendorName ASC, t.IncidentDate DESC;
虽然这应该在两种环境中运行,over 形式在 SQL 中可能表现更好。
【讨论】: