2017-12-11 1 views
1

SELECT 레코드는 만기일이 max() 인 30 일 후에 만료되도록 설정된 MariaDB를 사용하고 있습니까?MariaDB 만료 된 계정에 대한 모든 레코드를 선택하십시오.

무엇 하지SELECT에 : 오늘 2017년 12월 7일하고 계정 아래의 "는"전혀 기록이 "A"로 계정에 반환해야 다음 2018 년 6 월 1 일의 최대 유효 기간이있는 경우 이 테이블 에 현재 날짜보다 오래된 계정 "a"행이 있는지에 관계없이 원하는 SELECT 쿼리

무엇 해야 수 선택 : 계정 "B"는 두 개의 레코드를 가지고 있으며이 max() 기록을 30 일 미만이다; 행 id 4는 원하는 SELECT 쿼리에서 어떤 행 이 반환해야합니다.

+----+---------+------------+ 
| id | account | expiration | 
+----+---------+------------+ 
| 1 | a  | 2017-01-01 | 
| 2 | a  | 2018-06-01 | 
| 3 | b  | 2017-01-01 | 
| 4 | b  | 2018-01-01 | 
+----+---------+------------+ 

내 엄격한 테스트가 궁극적으로 실패하더라도 필자는 다양한 측면에서 약간의 시간을 보냈습니다.

SELECT DATEDIFF(STR_TO_DATE(expiration, '%Y-%m-%d'),CURDATE()) AS days_left FROM table; 

답변

2
  1. 당신은 이미 MAX을 원하는주의 사항 : 여기가 작동있어 하나의 비트입니다.
  2. 계정 당 MAX이 필요하며 이는 SQL에서 GROUP BY account으로 변환됩니다.
  3. 특정 계정, 즉 특정 날짜 범위 내의 MAX 인 계정 만 표시하려고합니다. 집계 기준은 HAVING 절에 있습니다. 따라서

:

select account 
from mytable 
group by account 
having max(expiration) between current_date and current_date + interval 30 day; 
+0

이 내 초기 테스트에 좋아 보인다! 식사와 몇 가지 검사를 한 후에 받아 들일 것입니다. +1은 'HAVING'을 본 적이 없기 때문입니다. – John

+0

'HAVING'에 대한 튜토리얼을 읽고 자신의 직접적인 테스트를 보면 올바른 대답으로 받아 들여지고 있다고 말할 수 있다고 생각합니다. 고맙습니다! :-) – John