programing

mysql 테이블에서 datetime x min ago와 datetime x min ago 사이에서 선택

oldcodes 2023. 7. 23. 14:39
반응형

mysql 테이블에서 datetime x min ago와 datetime x min ago 사이에서 선택

제가 제목에서 잘 요약한 것 같습니다.특정 시간부터 다른 시간까지 온라인 사용자를 선택합니다.내 테이블은 다음과 같습니다.

CREATE TABLE online (

    id bigint(20) NOT NULL auto_increment,
    `username` varchar (16) NOT NULL, 
    `ip` varchar(39) NOT NULL default '',   
    `time` datetime NOT NULL default '0000-00-00 00:00:00' ,

      PRIMARY KEY  (id)
);

다음을 반환하는 쿼리를 원합니다.username온라인 상태였던 것들.last 15 minutes.

그리고 온라인 상태였던 사용자에 대한 쿼리.last 60 minutes, but not the last 15 minutes쿼리가 동일한 값을 반환하지 않습니다.어떻게 해야 할지 모르겠어요.

첫 번째 질문의 경우:

SELECT username
FROM online
WHERE time > NOW() - INTERVAL 15 MINUTE

그리고 당신의 두 번째를 위해:

SELECT username
FROM online
WHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE

이 두 쿼리 모두 각 사용자가 온라인 테이블에 한 번만 나타나는 것으로 가정합니다. 이러한 경우 고유 제약 조건을 추가하여 이를 적용해야 합니다.

사용자 이름이 표에 두 번 이상 나타날 수 있는 경우 첫 번째 쿼리에 대해 SELECT 후 DISTINCT를 추가하기만 하면 되지만 두 번째 쿼리에 대해서는 약간 다른 접근 방식이 필요합니다.

SELECT DISTINCT username
FROM online
WHERE time > NOW() - INTERVAL 60 MINUTE
AND NOT EXISTS
(
    SELECT *
    FROM online
    WHERE time > NOW() - INTERVAL 15 MINUTE
)

DATE_SUB를 사용하여 NOW()에서 반환된 DATTIME에서 시간을 뺍니다.

지난 15분

SELECT o.*
  FROM ONLINE o
 WHERE o.time >= DATE_SUB(NOW(), INTERVAL 15 MINUTE) 

마지막 60분, 하지만 마지막 15분은 아닙니다.

SELECT o.*
  FROM ONLINE o
 WHERE o.time BETWEEN DATE_SUB(NOW(), INTERVAL 60 MINUTE) 
                  AND DATE_SUB(NOW(), INTERVAL 15 MINUTE) 

중복 처리에는 추가 비용이 듭니다.

언급URL : https://stackoverflow.com/questions/4838120/select-from-mysql-table-between-datetime-x-min-ago-and-datetime-x-min-ago

반응형