select MAX (handover.LF_TYPE) KEEP ( dense_rank first order by handover.CAR_ENTITY_ID desc ) as TYRE_TYPE, MAX (handover.HANDOVER_DATE_TIME) KEEP ( dense_rank first order by handover.CAR_ENTITY_ID desc ) as HANDOVER_DATE_TIME, aceHandover.CAR_INFO_ID from HANDOVER_CHECKLIST handover改为postgresql格式
时间: 2024-03-11 17:49:10 浏览: 111
在 PostgreSQL 中,可以使用子查询和窗口函数来模拟 Oracle 中的 `KEEP` 函数。具体实现如下:
```sql
SELECT DISTINCT ON (aceHandover.CAR_INFO_ID)
MAX(handover.LF_TYPE) OVER (PARTITION BY aceHandover.CAR_INFO_ID ORDER BY handover.CAR_ENTITY_ID DESC) AS TYRE_TYPE,
MAX(handover.HANDOVER_DATE_TIME) OVER (PARTITION BY aceHandover.CAR_INFO_ID ORDER BY handover.CAR_ENTITY_ID DESC) AS HANDOVER_DATE_TIME,
aceHandover.CAR_INFO_ID
FROM ace_handover_checklist aceHandover
JOIN handover_checklist handover ON aceHandover.HANDOVER_CHECKLIST_ID = handover.HANDOVER_CHECKLIST_ID
ORDER BY aceHandover.CAR_INFO_ID, handover.CAR_ENTITY_ID DESC;
```
在上面的查询中,首先使用 `JOIN` 子句将 `ace_handover_checklist` 和 `handover_checklist` 表连接起来。然后,使用 `DISTINCT ON` 子句指定按照 `aceHandover.CAR_INFO_ID` 分组并保留每组的第一行。对于每个分组,使用 `MAX` 窗口函数和 `OVER` 子句来获取 `handover.LF_TYPE` 和 `handover.HANDOVER_DATE_TIME` 列的最大值,并根据 `handover.CAR_ENTITY_ID` 列进行降序排序,从而保留每个分组的第一个值。
最后,使用 `ORDER BY` 子句对结果进行排序,确保按照 `aceHandover.CAR_INFO_ID` 和 `handover.CAR_ENTITY_ID` 进行升序和降序排序。
阅读全文