programing

SQL/JPA에서 각 ID에 대한 특정 타임스탬프 범위로 필터링하는 ID 목록에 대한 데이터를 선택하려고 합니다.

stoneblock 2023. 7. 13. 20:21

SQL/JPA에서 각 ID에 대한 특정 타임스탬프 범위로 필터링하는 ID 목록에 대한 데이터를 선택하려고 합니다.

데이터가 있는 테이블이 있는데 레코드 ID, 사용자 ID, 타임스탬프 및 데이터 열이 있습니다.클라이언트로부터 userId 목록을 수신합니다. 처음에는 모든 useId에 대해 동일한 타임스탬프 범위로 데이터를 가져와야 했습니다.userId IN (list)그러나 이제 각 userId에 대해 서로 다른 타임스탬프 범위로 데이터를 가져와야 합니다.ID 1에는 1643580000000에서 166431200000까지의 데이터와 1626418800000에서 1647500400000까지의 userId 2(mills의 utcTimestamp)가 필요합니다.

아마도 [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에 대해 다른 UN을 추가해야 합니다.

언급URL : https://stackoverflow.com/questions/71119360/sql-jpa-want-to-select-data-for-a-list-of-ids-filtering-by-a-specific-timestamp