2013-02-16 3 views
0

я таблица описана нижеMySQL суб-запрос выбора группы по

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: [email protected] 
name: chris|expires at: 2014-01-01|email: [email protected] 

Я хочу, чтобы сделать запрос, который я нахожу все истекшие пользователи на основе загрузок. Но для одного и того же адреса электронной почты может быть несколько запросов. В вышеуказанном случае этот человек НЕ должен появляться в списке с истекшим сроком действия.

Похоже, что я хочу сделать GROUP BY электронной почте, но как-то отфильтровать истечения срока действия, если он> NOW()

+0

Не ясно. Можете ли вы предоставить тестовые данные и желаемый результат? –

ответ

0

Вот что вы должны сделать. Я не использовал функции datetime в бит, поэтому вам придется дважды проверить его на правильность. Я просто предположил, что NOW() была функцией.

Найдите набор неистекших пользователей, а затем вычтите его из всего набора пользователей.

select * from table where email not in (select email from table where expired_at > NOW()); 
1

Казалось бы, что для каждого уникального пользователя, которого вы хотите максимальную дату и проверить, является ли это перед тем NOW() правильно? Таким образом:

SELECT name, MAX(expired_at) as latest_expired FROM payments WHERE lastest_expired < NOW() GROUP BY name; 
Смежные вопросы