我有以下 Oracle SQL 查询:
SELECT user FROM global_users user WHERE user.status = 'ACTIVE'
AND user.description IS NOT NULL AND user.updatedGoodsDate BETWEEN '2024-03-10 20:09:53' AND '2024-03-10 20:09:53'
AND ROWNUM <= 13
我尝试使用 Spring Data JPA 将查询编辑到 Postgres 中:
@Query("SELECT user FROM global_users user WHERE user.status = :status
AND user.description IS NOT NULL AND user.updatedGoodsDate BETWEEN :startDate AND :endDate")
List<Users> findTopUsers(@Param("status") TransactionStatus status,
@Param("startDate") OffsetDateTime start, @Param("endDate") OffsetDateTime end, @Param("count") long count);
但是我不能在 Postgre 中使用 LIMIT 子句。有什么方法可以编辑查询并获得相同的结果吗?
例如可以用子查询来实现吗?
从 Oracle 12 和 PostgreSQL 13 开始,两个 RDBMS 都支持
FETCH FIRST n ROWS ONLY
语法:
SELECT "USER"
FROM global_users
WHERE status = 'ACTIVE'
AND description IS NOT NULL
AND updatedGoodsDate BETWEEN TIMESTAMP '2024-03-10 20:09:53'
AND TIMESTAMP '2024-03-10 20:09:53'
-- ORDER BY something
FETCH FIRST 13 ROWS ONLY
对于样本数据:
CREATE TABLE global_users (
"USER" VARCHAR(10),
status VARCHAR(8),
description VARCHAR(20),
updatedGoodsDate TIMESTAMP
)
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Alice', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Beryl', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Carol', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Debra', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Emily', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Fiona', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Grace', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Haley', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Irene', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Julie', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Kelly', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Lydia', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Megan', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
INSERT INTO global_users ("USER", status, description, updatedGoodsDate)
VALUES ('Naomi', 'ACTIVE', 'X', TIMESTAMP '2024-03-10 20:09:53');
输出:
用户 |
---|
爱丽丝 |
绿柱石 |
卡罗尔 |
黛布拉 |
艾米丽 |
菲奥娜 |
格蕾丝 |
海莉 |
艾琳 |
朱莉 |
凯莉 |
莉迪亚 |
梅根 |