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

这是你必须做的。我没有使用过 datetime 函数,所以你必须仔细检查它的正确性。我只是假设 NOW() 是一个函数。

找到未过期用户的集合,然后从整个用户集合中减去它。

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