programing

단일 쿼리를 사용하여 여러 날짜 간격당 항목 수 가져오기

shortcode 2022. 9. 25. 15:10
반응형

단일 쿼리를 사용하여 여러 날짜 간격당 항목 수 가져오기

SELECT COUNT(*) FROM `table` WHERE `datetime` > SUBDATE(NOW(), INTERVAL 1 DAY)

이것은 마지막 날 동안 엔트리의 수를 가져옵니다.단, 이 쿼리의 변동을 여러 번 송신하지 않고 여러 인터벌의 엔트리 수를 취득할 수 있습니까?INTERVAL 1 DAY,INTERVAL 1 WEEK,INTERVAL 1 MONTH, ...)?

그러기 위해서는 표현이 필요합니다.

SELECT
    COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 1 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END) AS lastDay,
    COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 7 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END ) AS lastSevenDays,
    COUNT(*) AS lastThirtyDays
FROM `table`
WHERE   
DATE(`datetime`) >= CURDATE() - INTERVAL 30 DAY

CASE WHEN 표현 사용 방법

주의: 마지막 날, 마지막 7일 및 마지막 30일의 결과를 얻으려면 이 쿼리를 사용합니다.

편집:

인덱스가 있는 경우datetime그러면 위의 쿼리는 해당 인덱스를 사용하지 못합니다.아래 제공된 쿼리를 사용하여 다음 인덱스를 활용하십시오.datetime.

SELECT
    COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 1 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END) AS lastDay,
    COUNT(CASE WHEN DATE(`datetime`) >= CURDATE() - INTERVAL 7 DAY AND DATE(`datetime`) < CURDATE() THEN 1 END ) AS lastSevenDays,
    COUNT(*) AS lastThirtyDays
FROM `table`
WHERE   
`datetime` >= (NOW() - INTERVAL 30 DAY - INTERVAL HOUR(NOW()) HOUR - INTERVAL MINUTE(NOW()) MINUTE - INTERVAL SECOND(NOW()) SECOND)

언급URL : https://stackoverflow.com/questions/38691480/get-number-of-entries-per-multiple-date-intervals-using-single-query

반응형