MySQL - как выбрать идентификатор, где минимальная / максимальная разница в датах превышает 3 года - PullRequest
3 голосов
/ 27 марта 2012

У меня есть такая таблица:

| id |           date     |        user_id         |
----------------------------------------------------
| 1  |     2008-01-01     |          10            |
| 2  |     2009-03-20     |          15            |
| 3  |     2008-06-11     |          10            |
| 4  |     2009-01-21     |          15            |
| 5  |     2010-01-01     |          10            |
| 6  |     2011-06-01     |          10            |
| 7  |     2012-01-01     |          10            |
| 8  |     2008-05-01     |          15            |

Я ищу решение, как выбрать user_id, где разница между датами MIN и MAX превышает 3 года.Для приведенных выше данных я должен получить:

|      user_id        |
-----------------------
|         10          |

Кто-нибудь может помочь?

Ответы [ 4 ]

5 голосов
/ 27 марта 2012
SELECT   user_id 
FROM     mytable 
GROUP BY user_id
HAVING   MAX(`date`) > (MIN(`date`) + INTERVAL '3' YEAR);

Проверено здесь: http://sqlize.com/MC0618Yg58

2 голосов
/ 27 марта 2012

Как и в подходе Берни, я бы оставил форматы даты родными. Я также, вероятно, сначала перечислю MAX, чтобы избежать звонка ABS (при условии, что всегда возвращается положительный номер).

SELECT   user_id
FROM     my_table
WHERE    DATEDIFF(MAX(date),MIN(date)) > 365

DATEDIFF просто возвращает дельту (в днях) между двумя указанными полями даты.

0 голосов
/ 27 марта 2012
SELECT A.USER_ID FROM TABLE AS A
JOIN TABLE AS B 
ON A.USER_ID = B.USER_ID
WHERE DATEDIFF(A.DATE,B.DATE) > 365
0 голосов
/ 27 марта 2012
SELECT user_id
 FROM (SELECT user_id, MIN(date) m0, MAX(date) m1
       FROM table
       GROUP by user_id)
HAVING EXTRACT(YEAR FROM m1) - EXTRACT(YEAR FROM m0) > 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...