0

以下に説明する表があります

mysql> describe payments;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| name           | varchar(128) | NO   |     | NULL    |                |
| email          | varchar(128) | NO   |     | NULL    |                |
| txn_id         | varchar(19)  | NO   |     | NULL    |                |
| payment_status | varchar(20)  | NO   |     | NULL    |                |
| auth           | varchar(40)  | NO   |     | NULL    |                |
| expired_at     | datetime     | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

次のような 2 つのエントリが存在する可能性があります。

name: chris|expires at: 2012-01-01|email: me@chrismuench.com
name: chris|expires at: 2014-01-01|email: me@chrismuench.com

ダウンロードに基づいて期限切れのすべてのユーザーを検索するクエリを実行したいと考えています。ただし、同じ電子メール アドレスに対して複数の完全が存在する可能性があります。上記の場合、この人物は期限切れリストに表示されるべきではありません。

GROUP BY 電子メールを実行したいようですが、有効期限が > NOW() の場合はどうにかして除外します

4

2 に答える 2

1

一意のユーザーごとに、最大の日付が必要であり、それがNOW()正しいかどうかを確認するように思われますか? そう:

SELECT name, MAX(expired_at) as latest_expired FROM payments WHERE lastest_expired < NOW() GROUP BY name;
于 2013-02-16T16:44:11.327 に答える
0

これがあなたがしなければならないことです。日時関数を少し使用していないので、正確かどうかを再確認する必要があります。NOW()は関数だと思いました。

有効期限が切れていないユーザーのセットを見つけて、それをユーザーのセット全体から差し引きます。

select * from table where email not in (select email from table where expired_at > NOW());
于 2013-02-16T16:26:46.293 に答える