source

MySQL 특정 달의 이전 날짜 이후의 모든 행을 선택합니다.

factcode 2022. 12. 25. 09:41
반응형

MySQL 특정 달의 이전 날짜 이후의 모든 행을 선택합니다.

그래서 아이디어는 간단하지만 어떻게 해야 할지 모르겠고 온라인에서 유용한 정보를 찾지 못했습니다.

MariaDB를 사용하여 인터넷 데이터 사용량을 추적하도록 시스템을 설정했습니다.매달 13일에 리셋되는 데이터 상한선이 있습니다.그리고 현재 사이클의 모든 데이터 사용량을 표시할 수 있도록 하고 싶습니다.

MySQL에서 가능합니까? (그래파나를 사용하여 데이터를 표시합니다.)

편집: 죄송합니다. 테이블 스키마를 포함하지 않았습니다.

create table network.data_usage
(
    time     timestamp default current_timestamp() not null on update current_timestamp(),
    mac      varchar(32)                           not null,
    download bigint    default 0                   not null,
    upload   bigint    default 0                   not null
);

분명히 시간 필드가 이 질문에 가장 관련이 있습니다.upload 필드 및 download 필드에는 이전 엔트리 이후 특정 MAC 주소의 입력/출력 총 바이트 수가 저장됩니다.

기본적으로 현재 날짜에 해당하는 달의 13일을 계산해야 합니다.이 달의 13일째에는, 다음의 URL로 이동합니다.

CURDATE() - INTERVAL DAY(CURDATE()) - 13 DAY

현재 날짜가 13보다 작으면 한 달만 빼면 됩니다.

CURDATE() - INTERVAL DAY(CURDATE()) - 13 DAY - INTERVAL IF(DAY(CURDATE()) < 13, 1, 0) MONTH

그것을 계산하면 다음과 같이 할 수 있습니다.SUM모든.download그리고.upload날짜 이후의 값:

SELECT SUM(download) AS downloads,
       SUM(upload) AS uploads,
       SUM(download + upload) AS total
FROM data_usage
WHERE time >= CURDATE() - INTERVAL DAY(CURDATE()) - 13 DAY - INTERVAL IF(DAY(CURDATE()) < 13, 1, 0) MONTH

각각을 합산할 수도 있습니다.mac를 사용하여 값을 매기다GROUP BY예를 들어 다음과 같습니다.

SELECT mac,
       SUM(download) AS downloads,
       SUM(upload) AS uploads,
       SUM(download + upload) AS total
FROM data_usage
WHERE time >= CURDATE() - INTERVAL DAY(CURDATE()) - 13 DAY - INTERVAL IF(DAY(CURDATE()) < 13, 1, 0) MONTH
GROUP BY mac

그룹화 기준의 경우mac, 를 추가함으로써 합계 행을 생성할 수도 있습니다.WITH ROLLUP에게GROUP BY절:

SELECT COALESCE(mac, 'Total') AS mac,
       SUM(download) AS downloads,
       SUM(upload) AS uploads,
       SUM(download + upload) AS total
FROM data_usage
WHERE time >= CURDATE() - INTERVAL DAY(CURDATE()) - 13 DAY - INTERVAL IF(DAY(CURDATE()) < 13, 1, 0) MONTH
GROUP BY mac WITH ROLLUP

dbfiddle 데모

언급URL : https://stackoverflow.com/questions/67101219/mysql-select-all-rows-since-the-previous-occurrence-of-a-certain-day-of-month

반응형