2017-12-11 6 views
1

以内に期限切れアカウントはどうすればよいアカウントがMariaDBはmax()有効期限のオフに基づいて、30日で有効期限が切れるように設定されている使用してのみSELECTレコードの?MariaDB SELECTのみのためのすべてのレコードが30日

ないSELECTへ:今日は2017年12月7日で、アカウントの下に「」絶対にレコードが「」を持つアカウントに返されるべきではない、その後2018年の6月1日の最大有効期限を持っている場合このテーブルでもに今日の日付よりも古いアカウント "a"の行が含まれているかどうかにかかわらず、希望のSELECTクエリ;アカウント「B」は、2本の記録を持っており、それが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をしたい気づく:ここで私が働いて持っている1ビットです。
  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

これが私の最初のテストで良いですね!食事といくつかのテストの後、私はそれを受け入れるでしょう。ただ、私はHAVINGを見たことがないからです。 – John

+0

「HAVING」についてのチュートリアルを読んで、自分の直接テストを見ると、これが正解として受け入れられていると言えるでしょう。ありがとうございました! :-) – John

関連する問題