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
我有一个 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