본문 바로가기
MySql

MySQL datetime x min 전과 datetime x min 전 사이에서 mysql 테이블에서 선택

by 베이스 공부 2020. 10. 20.
반응형

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

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)
);

지난 15 분 동안 온라인 상태였던 사용자 이름 을 반환하는 쿼리를 원합니다.

그리고 지난 60 분 동안 온라인 상태 였지만 지난 15 분 동안은 이 아닌 사용자에 대한 쿼리입니다. 따라서 쿼리는 동일한 값을 반환하지 않습니다. 이건 어떻게 해야할지 모르겠어요.

 

해결 방법

 

첫 번째 쿼리 :

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

이 두 쿼리는 각 사용자가 온라인 테이블에 한 번만 표시된다고 가정합니다 (실제로이 경우 UNIQUE 제약 조건을 추가하여 적용해야 함).

사용자 이름이 테이블에 두 번 이상 나타날 수있는 경우 첫 번째 쿼리에 대해 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
)

 

참조 페이지 https://stackoverflow.com/questions/4838120

 

 

반응형

댓글