programing

이전 달의 모든 행을 가져오기 위한 쿼리

sourcetip 2023. 1. 10. 21:41
반응형

이전 달의 모든 행을 가져오기 위한 쿼리

지난달에 작성된 데이터베이스의 모든 행을 선택해야 합니다.

예를 들어, 현재 달이 1월이면 12월에 작성된 모든 행을 반환하고, 달이 2월이면 1월에 작성된 모든 행을 반환합니다.나는 가지고 있다date_created다음 형식으로 작성된 날짜를 나열하는 내 데이터베이스의 열:2007-06-05 14:50:17.

SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

여기 다른 대안이 있습니다.인덱스가 있다고 가정합니다.DATE또는DATETIME형식 필드. 형식화된 날짜는 인덱스를 사용하기 전에 유형 변환되므로 인덱스를 사용해야 합니다.그러면 다음 메시지가 나타납니다.range보다 질문하다indexEXPLY와 함께 볼 때 쿼리합니다.

SELECT
    * 
FROM
    table
WHERE 
    date_created >= DATE_FORMAT( CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01' ) 
AND
    date_created < DATE_FORMAT( CURRENT_DATE, '%Y/%m/01' )

만약 미래의 날짜가 없다면...

SELECT * 
FROM   table_name 
WHERE  date_created > (NOW() - INTERVAL 1 MONTH);

테스트 완료.

Hobodave의 답변 대신

SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

EXTRACT에서도 YEAR_MONTH를 유닛으로 사용하여 동일한 작업을 수행할 수 있으므로 다음과 같이 AND가 필요하지 않습니다.

SELECT * FROM table
WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
1 MONTH)
SELECT *
FROM  yourtable
where DATE_FORMAT(date_created, '%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 month),'%Y-%m')

이 경우 지난 30일 또는 31일 동안의 기록이 아니라 이전 달력의 모든 기록이 반환됩니다.

이 질문에 대한 답은 이미 선택되었지만, 가장 간단한 질문은

SELECT * 
FROM table 
WHERE 
date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();
WHERE created_date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
  AND created_date <= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 0 DAY) 

이것은 나에게 효과가 있었다(이번 달에 쿼리를 실행한 요일에 관계없이 지난달에 작성된 모든 레코드를 선택한다).

단일 조건의 대안

SELECT * FROM table
WHERE YEAR(date_created) * 12 + MONTH(date_created)
    = YEAR(CURRENT_DATE) * 12 + MONTH(CURRENT_DATE) - 1

select fields FROM table WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),'%');

date_created가 인덱스화되면 필드 값에 변환 함수를 적용하지 않기 때문에 인덱스를 활용할 수 있습니다.

다음은 지난 달의 기록을 얻기 위한 쿼리입니다.

SELECT *
FROM `tablename`
WHERE `datefiled`
BETWEEN DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH )
AND 
LAST_DAY( DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH ) )

경위 - saqib

또 하나의 방법은 다음과 같습니다.

MYSQL

select * from <table_name> where date_created >= DATE_ADD(NOW(), INTERVAL -30 DAY);

만약 당신이 지난달의 주문을 받고 싶다면, 당신은 그것을 사용해 볼 수 있다.

WHERE MONTH(order_date) = MONTH(CURRENT_DATE()) -1 
SELECT *  FROM table  
WHERE  YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

언급URL : https://stackoverflow.com/questions/2090221/query-to-get-all-rows-from-previous-month

반응형