이전 달의 모든 행을 가져오기 위한 쿼리
지난달에 작성된 데이터베이스의 모든 행을 선택해야 합니다.
예를 들어, 현재 달이 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
보다 질문하다index
EXPLY와 함께 볼 때 쿼리합니다.
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
'programing' 카테고리의 다른 글
PHP 다차원 배열 검색(특정 값으로 키 찾기) (0) | 2023.01.10 |
---|---|
url_for()를 사용하여 플라스크에 동적 URL을 만듭니다. (0) | 2023.01.10 |
Double.parseDouble(null)과 Integer.parseInt(null)가 다른 예외를 발생시키는 이유는 무엇입니까? (0) | 2023.01.10 |
Javascript - 두 날짜 사이의 날짜 배열 가져오기 (0) | 2023.01.10 |
re.compile을 사용하지 않고 대소문자를 구분하지 않는 정규 표현식입니까? (0) | 2023.01.10 |