我有一张下面描述的表格
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)
我可能有两个条目,例如:
name: chris|expires at: 2012-01-01|email: me@chrismuench.com
name: chris|expires at: 2014-01-01|email: me@chrismuench.com
我想根据下载情况查找所有过期用户的查询。但是同一个电子邮件地址可能有多个entires。在上述情况下,此人不应出现在过期的列表中。
好像我想做一个GROUP BY电子邮件但是如果它是>则以某种方式过滤掉过期。 NOW()
答案 0 :(得分:1)
对于每个唯一身份用户,您希望获得最大日期并检查是否在NOW()
之前?所以:
SELECT name, MAX(expired_at) as latest_expired FROM payments WHERE lastest_expired < NOW() GROUP BY name;
答案 1 :(得分:0)
这是你必须要做的。我没有使用日期时间函数,所以你必须仔细检查它是否正确。我只是假设NOW()是一个函数。
找到未过期的用户集,然后从整个用户集中减去它。
select * from table where email not in (select email from table where expired_at > NOW());