반응형
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
반응형
'programing' 카테고리의 다른 글
자바스크립트에서 문자열을 연결하는 가장 효율적인 방법은? (0) | 2023.07.23 |
---|---|
옵션 매개 변수를 함수에 전달하는 방법이 있습니까? (0) | 2023.07.23 |
내부 함수를 가져오는 것이 파이썬적입니까? (0) | 2023.07.18 |
gem_point에 점 레이블 지정 (0) | 2023.07.18 |
누가 StandardScaler에 대해 설명해 줄 수 있습니까? (0) | 2023.07.18 |