SQL/JPA 想要 select id 列表的数据,每个 id 按特定时间戳范围过滤

SQL/JPA want to select data for a list of ids filtering by a specific timestamp range for each id

我有一个 table 和一些数据,有记录 ID、用户 ID、时间戳和数据列。从客户端接收一个 userIds 列表,最初,我只需要使用 userId IN (list) 为所有 useIds 按相同的时间戳范围获取数据。但是,现在我需要通过每个 userId 的不同时间戳范围获取数据,假设 userID 1 需要从 1643580000000 到 1646431200000 的数据,userId 2 需要从 1626418800000 到 1647500400000(utcTimestamp in mills)。

我很可能会收到一个 [userId, startTime, endTime] 的列表,所以,我正在考虑为每个 userId 循环主查询及其各自的时间戳范围(我已经看到这是一个坏主意,因为性能,但如果必须,我必须),但我也发现了游标(这里没有太多经验)。

我想知道是否有可能在没有循环或游标的情况下获得我想要的东西,如果不能,最好的方法是每一个。

提前致谢!

注意事项:使用 MariaDB。 SQL 查询将在 Java 服务存储库中用作 nativeQuery。

您可以运行这样查询。

当然你必须为每个用户添加他自己的时间范围

SELECT * FROM mytable 
WHERE (userID = 1 AND `timestamp` BETWEEN 1643580000000 AND  1646431200000) 
OR (userId = 2 AND `timestamp`BETWEEN 1626418800000 AND 1647500400000)

如果你有很多行而没有那么多要处理的 id,你可以用

SELECT * FROM mytable 
WHERE (userID = 1 AND `timestamp` BETWEEN 1643580000000 AND  1646431200000) 
UNION 
SELECT * FROM mytable 
WHERE (userId = 2 AND `timestamp`BETWEEN 1626418800000 AND 1647500400000)

这里还需要为每个 id 添加另一个 UNION